私は最近、PE(Portable Executable)
ファイル形式、具体的にはPE/COFF
で開始しました。私はチュートリアルをRandy Kathhereで読んでいました。PEファイルでMZ DOSヘッダーシグネチャが0x54ADになっているのはなぜですか?
MZ DOSヘッダーの構造を読んでいるときに、e_magic
フィールドの署名を使用してMZ DOSヘッダーが検証されていました。次のような構造は、次のとおりです。
typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header
USHORT e_magic; // Magic number
USHORT e_cblp; // Bytes on last page of file
USHORT e_cp; // Pages in file
USHORT e_crlc; // Relocations
USHORT e_cparhdr; // Size of header in paragraphs
USHORT e_minalloc; // Minimum extra paragraphs needed
USHORT e_maxalloc; // Maximum extra paragraphs needed
USHORT e_ss; // Initial (relative) SS value
USHORT e_sp; // Initial SP value
USHORT e_csum; // Checksum
USHORT e_ip; // Initial IP value
USHORT e_cs; // Initial (relative) CS value
USHORT e_lfarlc; // File address of relocation table
USHORT e_ovno; // Overlay number
USHORT e_res[4]; // Reserved words
USHORT e_oemid; // OEM identifier (for e_oeminfo)
USHORT e_oeminfo; // OEM information; e_oemid specific
USHORT e_res2[10]; // Reserved words
LONG e_lfanew; // File address of new exe header
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
とチュートリアルは言う:
すべてのMS-DOS互換の実行可能ファイルは、ASCII文字MZを表し0x54AD、 にこの値を設定します。
私の質問は同じです。
M
とZ
のASCII値は16進数で4D
と5A
に変換され、それぞれ77
及び90
あります。 0x54AD
はMZ
をどのように表していますか?
愚かな質問かもしれません。しかし、あまりにも愚かであるかどうか理解するのを助けてください。
ありがとうございました。