Pergunta

Como posso encontrar os parâmetros de um em situação irregular função DLL?

Eu tenho procurado por toda a internet e acabou encontrando uma maneira: envolve funções decorados. No entanto, não consigo encontrar uma maneira de obter os.

Qualquer ajuda seria apreciada.

Foi útil?

Solução

Você precisa desmontar o aplicativo usando, como Paulo observou, algo como IDA Pro (ou a versão gratuita do mesmo).

Um bom recurso introdutório é o Wikibook, x86 Desmontagem . Especificamente, dê uma olhada na seção sobre as funções e quadros de pilha . Deduzir os parâmetros de função pode ser simples para funções simples tomar alguns parâmetros do tipo padrão.

Provavelmente a melhor maneira de começar com este tipo de coisa é criar um pequeno DLL teste, criar algumas funções com parâmetros conhecidos, e, em seguida, desmontar o DLL para ver os padrões. Saiba desmontagem de suas próprias funções (para o qual você tem o código-fonte e conhecer a assinatura completa), em vez de mergulhar em desmontar coisas de terceiros.

Outras dicas

Eu fiz uma bastante aprofundada resposta aqui , ReactOS é a sua melhor aposta, uma vez que parece mais uma vez, todos aqui é um pouco fora da base.

eu fortemente desencorajar tentando sistema de desmonte de DLL.

A MUITO Mais adventagious (e eu não acredito que discutiu tão longe dos olhares das coisas), a técnica é para enumerar o conteúdo do PDB.

arquivos PDB são símbolos de depuração, como você deve saber, no entanto, a Microsoft é necessária, devido à ação de processos judiciais anti-trust, para liberar grandes volumes de informação de outra forma não-documentados.

informações totalmente precisos, utilizáveis ??e atualizado para enorme quantidade de da API do Windows é única documentado via PDB arquivo de. Os tipos e nomes convenção de chamada, número de argumentos e até mesmo argumento são documentadas as suas (mas não a especificidades em relação ao uso de curso:).

Revisão do DIA SDK, dia2dump é um bom exemplo distribuído com Visual Studio, para investigar mais, ele também oferece uma solução para undecorate função de, para falar especificamente à sua pergunta.

Além disso, kernel32 fornece UnDecorateSymbolName, então você pode usar isso também, se você não quiser link para as bibliotecas de depuração SDK.

A única maneira de fazer isso é através de desmontar a função e ver como ele usa os registradores e pilha. IDA Pro é a melhor ferramenta para fazer isso, mas não é algo que é trivial.

É COM DLL? Se for uma DLL COM, em seguida, registrá-lo, use vista OLE conhecer as Interafaces e parâmetros.

Em primeiro lugar, baixar Dependency Walker e abrir o DLL na mesma. Você verá símbolos exportados e importados. Se o seu nome de função se parece com _MyFunction - é estilo "C" (não decorados) e você não tem muito a ver com isso (pode ser desmontar como disse antes)

?

Se é mais como _MyFunction @ LoNgSetOfSome @ _StrangeChAracTers é C ++ - decorados e você pode tentar "undecorate"-lo usando {unofficial} informações aqui

Se a única informação que você tem é o nome da função undecorated, então, infelizmente, não é possível deduzir os parâmetros da função de que sozinho.

Se você é bom com a montagem pode ser possível desmontar o código de máquina para a função e engenheiro-lo inversa. Mas isso é razoavelmente difícil de fazer para todos, mas as funções mais simples.

Eu realmente não estou familiarizado com o formato PE que usa o Windows, mas eu tenho certeza que não há nenhuma maneira real fácil de fazer isso. Se a tabela de símbolo não tem sido despojado você pode ser capaz de encontrar algumas informações (não sei como o Windows armazena informações de depuração no PE), mas é quase certo que não iria ajudá-lo com os tipos de parâmetros. A melhor coisa a fazer é carregar a DLL em um depurador e experiência com ele ... monitorar a memória crua sobre os quadros de pilha, enviar vários tipos de variáveis, etc.

Mesmo se você encontrar um bom recurso sobre a informação de depuração em um arquivo PE, há quase certamente não será qualquer informação para uma função privado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top