我试图深入理解 DOS 标头,但我被这些标头所困扰。我知道唯一需要的字节是 MZ 签名和指向 PE 部分的指针,但我必须知道这两个到底是什么:
USHORT e_cblp; // Bytes on last page of file
USHORT e_cp; // Pages in file
在大多数可执行文件的二进制代码中,这些值分别是 90h 和 03h。一页是 512 字节的代码,所以有 3 页,但是在哪里呢?在文件中哪里可以找到它们?如何在 512 字节的最后一页中识别这些 90h (144) 字节?
此信息仅由 DOS 要求。在 DOS 中运行的 PE 文件的唯一代码是 DOS 存根,它不是 3 页代码,而是只有 64 个字节。那么,90h 和 03h 必须在那里做什么?我不能说e_cblp=01h
和e_cp=DOS header+DOS stub
吗?