为什么不同的十六进制编辑器对一个文件显示不同的二进制文件?

为什么不同的十六进制编辑器对一个文件显示不同的二进制文件?

当我打开一个二进制文件(在本例中为)时,对于同一个文件,不同的十六进制编辑器显示的结果各不相同。我在节头的起始点进行了测试,因此请注意( )C:\\Windows\\System32\\notepad.exe的起始地址。2E 74 65 78 74 00 00 00".text..."

答案1

这些是不同的文件。

什么时候 System32 不是 System32?[强调我的]:

在 32 位 Windows 中,只有一个System32文件夹包含许多本机二进制文件(或硬链接),并且无法在 32 位 Windows 上执行 64 位代码。

但是,对于 64 位 Windows,我们有“Windows On Windows 64”(WOW64),它允许 32 位进程通过包装器运行,并且在这种情况下需要考虑一些事项:

  1. 只有 32 位 DLL 才能加载到 32 位进程中,只有 64 位 DLL 才能加载到 64 位进程中。
    […]

  2. 32 位进程需要能够在 64 位 Windows 上无缝运行,因此由于 (1),我们需要一些二进制文件同时具有 32 位和 64 位版本。
    […]

  3. 为了促进 (2) 但不破坏本机 (x64) 进程的行为,32 位进程会在不知情的情况下重定向某些 I/O。
    […]

[…]

对于在 x64 Windows 上运行的 32 位进程:
-%systemroot%\System32重定向至%systemroot%\SysWOW64
[…]

我猜有些十六进制编辑器是 32 位的,会重定向到SysWOW64,有些是 64 位的,会查看“真实的” System32。不同的编辑器会感知不同的System32,因此 也不同notepad.exe

如果您复制notepad.exe到不受影响的文件夹并分析副本,则所有编辑器都将显示相同的内容。您将看到哪个文件?这取决于复制工具是 32 位还是 64 位。

相关内容