Siga-nos em...
Follow us on Twitter Follow us on Facebook Watch us on YouTube
Registro

Alpha Servers
Resultados 1 a 1 de 1
  1. #1

    Avatar de Chris7yan
    Data de Ingresso
    Sep 2009
    Localização
    NA MINHA CASA.
    Posts
    139
    Agradecido
    7
    Agradeceu
    6
    Peso da Avaliação
    16

    Padrão Criado sua DLL em Assembly

    Esqueleto do DLL no "ASM":

    Código:
    .386
    .Model flat, StdCall
    Option CaseMap:none
    ;///////////////////////////////////////////////////////////
    ;Nós fazemos o "Include" a fim evitar definir C/macro
    ;//////////////////////////////////////////////////////////
    Include \masm32\include\windows.inc
    Include \masm32\include\user32.inc
    Include \masm32\include\kernel32.inc
    Include \masm32\include\masm32.inc
    IncludeLib \masm32\lib\user32.lib
    IncludeLib \masm32\lib\kernel32.lib
    IncludeLib \masm32\lib\masm32.lib
     
    .Const
    ;/////////////////////////////////
    ;Constantes a Declarar
    ;/////////////////////////////////
     
    .Data
    ;///////////////////////////////
    ;Informação Inicializada!
    ;//////////////////////////////
     
    .Data?
    ;//////////////////////////////
    ;Informação sem Inicializar
    ;/////////////////////////////
     
    .Code
    DLLEntry Proc hInstDLL:HINSTANCE, reason:DWord, reserved1:DWord
            Mov Eax, TRUE
            Ret
    DLLEntry EndP
    Agora sabendo como é o esqueleto do DLL no ASM, nós tentaremos adicionar algum PROC:

    Código:
    INILoad Proc
    ;/////////////////////////////////////////////////////////////////
    ; INILoad é o PROC do DLL
    ; Aqui nós adicionaremos o índice do .ini da configuração
    ;////////////////////////////////////////////////////////////////
     Invoke GetPrivateProfileIntA, Addr Sections, Addr BlessPrice, 9000000, Addr [IniFile]
     Mov DWord Ptr Ds:[508467H], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr SoulPrice, 6000000, Addr [IniFile]
     Mov DWord Ptr Ds:[508446H], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosPrice, 810000, Addr [IniFile]
     Mov DWord Ptr Ds:[508489H], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr LifePrice, 45000000, Addr [IniFile]
     Mov DWord Ptr Ds:[5084ABH], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr CreationPrice, 36000000, Addr [IniFile]
     Mov DWord Ptr Ds:[5084CCH], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr ExcelentDrop, 2000, Addr [IniFile]
     Mov DWord Ptr Ds:[41A492H], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosMix10, 50, Addr [IniFile]
     Mov DWord Ptr Ds:[49136FH], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosMix11, 45, Addr [IniFile]
     Mov DWord Ptr Ds:[49139AH], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosMix12, 45, Addr [IniFile]
     Mov DWord Ptr Ds:[4913C5H], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosMix13, 45, Addr [IniFile]
     Mov DWord Ptr Ds:[4913F0H], Eax
    INILoad EndP
    Naquela PROC que nós o fizemos devia criar a leitura do INI

    Explicação pelas peças do Proc INILoad

    Código:
    Invoke GetPrivateProfileIntA, Addr Sections, Addr BlessPrice, 9000000, Addr [IniFile]Invoke GetPrivateProfileIntA = É a função necessária carregar o ini ou uma lima da configuração.
    
    Addr Sections = A seção é adicionada aqui onde INI será a função de nossos (Key).... Ejemplo: "Sections" = CommonOptions (em .ini [CommonOptions])
    
    Addr BlessPrice, 9000000 = BlessPrice é a opção que nós definimos neste caso o preço de uma jóia, 9000000 = O preço padrão mas define outro no ini
    
    [IniFile] = Diz aqui que deve o olhar em nosso .INI
    
    
    Mov DWord Ptr Ds:[508467H], Eax508467 = É o OFFSET onde está a opção (no GS) essa nós quer que é modificada em nosso INI (neste caso, é o OFFSET onde é o preço do bless)
    
    INILoad EndP
    Indica-nos que o PROC terminou lá.
    -------------

    Você terá observado quem muitas coisas de PROC (INILoad) devem ser declaradas antes de poder o usar, à continuação eu adiciono o esqueleto do DLL já visto com este PROC (INILoad) adicionado e tudo declarados:

    Código:
    .386
    .Model flat, StdCall
    Option CaseMap:none
    ;///////////////////////////////////////////////////////////
    ;Nós fazemos o "Include" a fim evitar definir C/macro
    ;//////////////////////////////////////////////////////////
    Include \masm32\include\windows.inc
    Include \masm32\include\user32.inc
    Include \masm32\include\kernel32.inc
    Include \masm32\include\masm32.inc
    IncludeLib \masm32\lib\user32.lib
    IncludeLib \masm32\lib\kernel32.lib
    IncludeLib \masm32\lib\masm32.lib
     
    .Const
    ;/////////////////////////////////
    ;Constantes a Declarar
    ;/////////////////////////////////
     
    .Data
    ;///////////////////////////////
    ;Informação Inicializada!
    ;//////////////////////////////
    IniFile DB "./CMT.ini", 0                   ;Nome do INI
    Sections DB "CommonOptions", 0      ;Nome do Sections
    BlessPrice DB "BlessPrice", 0
    SoulPrice DB "SoulPrice", 0
    ChaosPrice DB "ChaosPrice", 0
    LifePrice DB "LifePrice", 0
    CreationPrice DB "CreationPrice", 0
    ExcelentDrop DB "ExcelentDrop", 0
    SoulRate DB "SoulRate", 0
    ChaosMix10 DB "ChaosMix10", 0
    ChaosMix11 DB "ChaosMix11", 0
    ChaosMix12 DB "ChaosMix12", 0
    ChaosMix13 DB "ChaosMix13", 0
    .Data?
    ;//////////////////////////////
    ;Informação sem Inicializar
    ;/////////////////////////////
     
    .Code
    DLLEntry Proc hInstDLL:HINSTANCE, reason:DWord, reserved1:DWord
            Mov Eax, TRUE
            Ret
    DLLEntry EndP
    ;--------------------------------------------------------------------
    ;--------------------------------------------------------------------
    INILoad Proc
    ;/////////////////////////////////////////////////////////////////
    ; INILoad é o PROC do DLL
    ; Aqui nós adicionaremos o índice do .ini da configuração
    ;////////////////////////////////////////////////////////////////
     Invoke GetPrivateProfileIntA, Addr Sections, Addr BlessPrice, 9000000, Addr [IniFile]
     Mov DWord Ptr Ds:[508467H], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr SoulPrice, 6000000, Addr [IniFile]
     Mov DWord Ptr Ds:[508446H], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosPrice, 810000, Addr [IniFile]
     Mov DWord Ptr Ds:[508489H], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr LifePrice, 45000000, Addr [IniFile]
     Mov DWord Ptr Ds:[5084ABH], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr CreationPrice, 36000000, Addr [IniFile]
     Mov DWord Ptr Ds:[5084CCH], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr ExcelentDrop, 2000, Addr [IniFile]
     Mov DWord Ptr Ds:[41A492H], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosMix10, 50, Addr [IniFile]
     Mov DWord Ptr Ds:[49136FH], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosMix11, 45, Addr [IniFile]
     Mov DWord Ptr Ds:[49139AH], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosMix12, 45, Addr [IniFile]
     Mov DWord Ptr Ds:[4913C5H], Eax
     Invoke GetPrivateProfileIntA, Addr Sections, Addr ChaosMix13, 45, Addr [IniFile]
     Mov DWord Ptr Ds:[4913F0H], Eax 
    INILoad EndP
    ;--------------------------------------------------------------------
    ;--------------------------------------------------------------------
    End DLLEntry
    Antes de compilar nosso DLL, nós necessitamos criar um Modulo do Definicion (NomedoDLL.Def) que contem:

    Código:
    LYBRARY NomeDoDLL
    EXPORTS INILoad
    Creditos:
    Código:
    MG_STATS (SINREPACKS.COM)
    Última edição por FusioN; 12-11-2010 às 12:16 PM.

  2. O Seguinte Usuário Agradeceu Chris7yan Por este Post Útil:


 

 

Informações de Tópico

Usuários Navegando neste Tópico

Há 1 usuários navegando neste tópico. (0 registrados e 1 visitantes)

Marcadores

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •