Como associar .dll à versão apropriada do Dependency Walker?

1

Há um truque legal que aprendi com meu colega: você associa arquivos .dll com o Dependency Walker, e agora, sempre que você tenta "executar" um arquivo .dll, ele abre o Dependency Walker para sua análise.

O problema é que existem duas versões do Dependency Walker: uma de 32 bits e outra de 64 bits. E é recomendado usar a versão do mesmo bitness para um .dll:

Yes. Dependency Walker will work with any 32-bit or 64-bit Windows module. There are 32-bit and 64-bit versions Dependency Walker. All versions are capable or opening 32-bit and 64-bit modules. However, there are major advantages to using the 32-bit Dependency Walker to process 32-bit modules and the 64-bit Dependency Walker to process 64-bit modules. This is especially true when running on a 64-bit version of Windows, which allows execution of both 32-bit and 64-bit programs. The 32-bit subsystem on 64-bit Windows (known as "WOW64") has its own private registry, "AppPaths", "KnownDlls", system folders, and manifest processing. Only the 32-bit version of Dependency Walker can access this 32-bit environment, which is needed to accurately process a 32-bit module. Likewise, only the 64-bit version of Dependency Walker can fully access the 64-bit environment, so it should always be used for processing 64-bit modules.

Existe uma maneira de associar dlls de 32 bits com a versão de 32 bits do Dependency Walker e dlls de 64 bits com a versão de 64 bits do Dependency Walker? Estou particularmente interessado em responder para o Windows 7 ou 10.

    
por Mikhail 10.02.2017 / 09:46

1 resposta

0

Criamos uma ferramenta baseada em Python para essa finalidade: link

A ferramenta é bastante simples. Como é mencionado no readme correspondente, você associa o arquivo .dll ao arquivo DllDispatcher.bat , que chama DllDispatcher.py file, que analisa o conteúdo .dll e determina se a dll fornecida é 32 bits ou 64 bits. Com base nisso, ele chama um dos dois aplicativos fornecidos. Os caminhos para os aplicativos são simplesmente codificados no início do arquivo DllDispatcher.py .

Não encontrei uma maneira fácil de determinar se uma dll é de 32 ou 64 bits. GetBinaryType só funciona para arquivos .exe. Para uma dll, você deve realmente carregar a biblioteca e, em seguida, passar a alça para IsWow64Process() ou analisar manualmente o cabeçalho da dll (ele tem o formato de arquivo PE). Eu escolhi o último. É menos robusto, mas mais rápido. Eu acho que a robustez não é um grande problema, já que é improvável que o formato PE mude em um futuro próximo, e essa solução não precisa ser completamente à prova de balas.

    
por 04.04.2017 / 22:43