2016-10-10 4 views
1

Je suis en mesure d'obtenir des informations de ligne à une adresse donnant en utilisant dbghelp.dll en appelant SymGetLineFromAddr64() de dbghelp.dll.Est-il possible d'obtenir le code d'assemblage à partir d'une adresse donnée en utilisant dbghelp.dll?

Il me donne seulement des informations de code source de cette adresse (par exemple le numéro de ligne et le nom de fichier). Cependant, dans WinDBG, je peux aussi obtenir le code d'assemblage de l'adresse donnée. Je ne suis pas sûr de savoir comment je peux le faire en utilisant dbghelp.dll. Si ce n'est pas possible, toute autre DLL que je peux utiliser?

+2

C'est le travail de [le débogueur] (https://msdn.microsoft.com/en-us/library/windows/hardware/ff552179 (v = vs.85) .aspx), pas de dbghelp.dll . Ou utilisez ReadProcessMemory(). –

Répondre

1

Je ne pense pas que vous puissiez obtenir une liste de désassemblage de dbghelp. Il est cependant assez facile, bien que plus de travail que vous ne le souhaitez probablement, d'intégrer le moteur gratuit OllyDbg Disassembler 2.01 dans votre code tant que l'adresse de départ correcte pour les instructions est spécifiée lors du démontage d'une ligne; c'est-à-dire que vous ne commencez pas avec une adresse qui est à mi-instruction, je pense que dbghelp s'occupe de. Autrement dit, en supposant que vous voulez désassembler le code x86. La seule astuce consiste peut-être à obtenir combien d'octets de longueur la ligne actuelle est si vous savez combien à désassembler, si vous voulez être plus colombophile qu'un montant codé de 64 octets à partir du début de la ligne en cours. Si vous avez énuméré toutes les lignes source du module via SymEnumLines() auparavant, vous pouvez utiliser cette information pour trouver non seulement la ligne en cours mais aussi le nombre d'octets jusqu'à la ligne suivante.