我正在尝试调试控制面板,并且想反汇编shell32.dll。由于控制面板是64位可执行文件,因此它将加载dll的64位版本(与名称相反)。当我在调试模式下查看反汇编的代码时,可以确认它确实是64位的。 Ida声称它位于C:\WINDOWS\system32\shell32.dll;但是,该dll完全是32位。我还检查了C:\WINDOWS\SysWOW64\shell32.dll,但它也是32位的。

有人可以解释这里发生了什么吗?

谢谢!

#1 楼

您看到的是WoW文件系统重定向的结果。当32位可执行文件请求Windows目录中文件的副本时,就会发生这种情况。由于64位结果对32位可执行文件可能毫无意义,因此您将获得32位副本。

如果使用资源管理器从system32目录中复制文件,然后检查结果,您将发现它是一个64位可执行文件。

#2 楼

正如@ peter-ferrie所说,如果您指定C:\WINDOWS\SysWOW64\shell32.dll,则32位进程将使用C:\WINDOWS\system32\shell32.dll而不是C:\WINDOWS\system32\shell32.dll

要强制32位进程使用实际的64位版本,可以指定以下文件路径:C:\WINDOWS\Sysnative\shell32.dll

这样就省去了使用Explorer制作64位DLL副本的麻烦。

评论


糟糕,我实际上想知道如何强制32位进程加载64位dll,然后重新读取整个质量检查,得出的结论是,您的意思是使用sysnative强制32位ida加载64位dll是正确的

– blabb
15年11月2日在21:24

是的,这是对的。

–詹森·格夫纳(Jason Geffner)
15年11月2日在21:48

+1为Sysnative文件夹

–rev
15年11月2日在23:54