PE - DOS 签名 (MZ) 和 Little Endian

问题描述 投票:0回答:1

这不是一个严重的问题,但是我很好奇为什么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。

我的概念有误吗?

signature portable-executable endianness magic-numbers
1个回答
0
投票

MZ 确实是正确的,但是当你用小尾数法写入时,它会得到 0x5A4D,而不是小尾数法的 0x4D5A。

小端映射:AA BB CC DD(存储时)-> DD CC BB AA(内存中)

例如00 00 5A 4D (

IMAGE_DOS_SIGNATURE
) -> 4D 5A 00 00(在 PE 文件中)

© www.soinside.com 2019 - 2024. All rights reserved.