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