如何在 32 位进程中调试 wow64.dll 中的崩溃

逆向工程 调试 x86 x64 例外
2021-06-14 09:26:42

我有一个 32 位应用程序和一些包装器工具,我一个接一个地使用它们来注入代码、挂钩系统 dll 函数(使用 patch-first-bytes-of-the-function-with-jump 方法)。我还有一个工具可以将代码注入应用程序进程并启动新线程。我的问题是有时我会遇到异常。该应用程序是 32 位的,所以我使用的是 32 位调试器。从我可以看到的异常来自应该是 wow64.dll 的内存区域。Wow64.dll 有一些 64 位代码。因此,我在调试此异常的原因时遇到问题。我的问题是:

  1. 当 wow64.dll 64 位代码抛出异常时,我可以依赖 32 位调试器报告的异常信息还是字段将包含错误值(64 位异常结构和 32 位异常结构之间有区别吗)?

  2. 是否有任何可靠的方法可以在 32 位进程中调试 64 位代码片段?

1个回答

你的问题好奇怪。据我所知,64 位 exe 仅加载 64 位 dll,而 32 位 exe 仅加载 32 位 dll。wow64.dll我不是很了解,但是如果你的exe是32位的,os会自动引导你的exe加载32位的dll。因此,系统驱动器包括Windows目录下的system32和syswow64目录。

此外,32 位 dll 不能包含 64 位汇编代码。如果仍然需要,32 位可执行文件可以包含 64 位汇编代码作为数据。

我希望我的回答可以帮助您了解您的问题。