是否可以使用 dbghelp.dll 从给定地址获取汇编代码?

Is it possible to get assembly code from a given address using dbghelp.dll?

我可以通过调用 dbghelp.dll 的 SymGetLineFromAddr64() 使用 dbghelp.dll 获取给定地址的线路信息。

它只给我那个地址的源代码信息(例如行号和文件名)。然而,在 WinDBG 中,我也可以获得给定地址的汇编代码。我不确定如何使用 dbghelp.dll 来做到这一点。如果不可能,我可以使用任何其他 dll 吗?

我认为您无法从 dbghelp 获得反汇编列表。然而,将免费的 OllyDbg Disassembler 2.01 引擎集成到您的代码中非常容易,尽管比您想要的要多得多,只要在反汇编行时指定指令的正确起始地址即可;即:您不以我认为 dbghelp 处理的指令中间的地址开始。也就是说,假设您要反汇编 x86 代码。

唯一的技巧可能是获取当前行的长度是多少字节,这样你就知道要反汇编多少,如果你想比从当前行开始的硬编码量(比如 64 字节)更漂亮的话.如果您事先通过 SymEnumLines() 枚举了模块的所有源代码行,您可以使用该信息不仅可以找到当前行,还可以找到下一行之前的字节数。