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

jin*_*ong 0 windows file-format hex-editor hexdump

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

Kam*_*ski 6

这些是不同的文件。

什么时候开始 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 位。