【问题标题】:Is it possible to get assembly code from a given address using dbghelp.dll?是否可以使用 dbghelp.dll 从给定地址获取汇编代码?
【发布时间】:2017-02-19 03:43:09
【问题描述】:
我可以通过调用 dbghelp.dll 的 SymGetLineFromAddr64() 来使用 dbghelp.dll 获取指定地址的行信息。
它只给我该地址的源代码信息(例如行号和文件名)。但是,在 WinDBG 中,我也可以获得给定地址的汇编代码。我不确定如何使用 dbghelp.dll 来做到这一点。如果不可能,我可以使用其他任何 dll 吗?
【问题讨论】:
-
这是the debugger 的工作,而不是dbghelp.dll 的工作。或者使用 ReadProcessMemory()。
标签:
windows
assembly
operating-system
windbg
dbghelp
【解决方案1】:
我认为您无法从 dbghelp 获得反汇编列表。然而,将免费的OllyDbg Disassembler 2.01 引擎集成到您的代码中非常容易,尽管可能比您想要的要多,只要在反汇编一行时指定了正确的指令起始地址即可;即:您不是从我认为 dbghelp 处理的中间指令地址开始的。也就是说,假设您要反汇编 x86 代码。
唯一的技巧可能是获取当前行的长度是多少字节,这样你就知道要反汇编多少字节,如果你想比从当前行开始的硬编码量说 64 字节更花哨的话。如果您事先通过 SymEnumLines() 枚举了模块的所有源代码行,您可以使用该信息不仅找到当前行,还可以找到下一行之前的字节数。