这不是一个严重的问题,但是我很好奇为什么DOS签名是0x5A4D而不是0x4D5A
DOS Header 的第一个成员是 MZ,这是由 Mark Zbikowski 命名的 DOS 签名。
下面的代码是DOS头的一部分。
typedef struct _IMAGE_DOS_HEADER {
WORD e_magic; // DOS signature : 4D5A ("MZ")
}
如果Mark Zbikowski想在PE文件的开头写下他的名字,为什么他不写代码0x4D5A而是写0x5A4D? 遵循Little Endian原则,即ZM而不是MZ。
我的概念有误吗?
MZ 确实是正确的,但是当你用小尾数法写入时,它会得到 0x5A4D,而不是小尾数法的 0x4D5A。
小端映射:AA BB CC DD(存储时)-> DD CC BB AA(内存中)
例如00 00 5A 4D (
IMAGE_DOS_SIGNATURE
) -> 4D 5A 00 00(在 PE 文件中)