- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图深入了解 DOS header ,但我坚持使用这些 header 。我知道唯一需要的字节是 MZ 签名和指向 PE 部分的指针,但我必须知道这两个到底是什么:
USHORT e_cblp; // Bytes on last page of file
USHORT e_cp; // Pages in file
e_cblp=01h
和
e_cp=DOS header+DOS stub
?
最佳答案
它是“整个”MZ 格式可执行文件的大小,最后一页中最后一个字节之后的任何内容都将被忽略。当 MS-DOS 加载一个 MZ 格式的可执行文件时,它会复制文件中头文件之后的所有内容,直到此限制为止。因此,事实上大多数 PECOFF 可执行文件将此字段设置为大于 MS-DOS stub 的值只是意味着当可执行文件在 MS-DOS 下运行时,PECOFF header 和部分 PECOFF 部分数据将加载到内存中。
我不知道为什么 Microsoft 链接器(和 GNU 链接器,但不是 Borland 或 Watcom 的)使用的默认 DOS stub 说它的大小为 1168 字节,而实际上要小得多。如果您在使用 Microsoft 的链接器时提供自己的 stub ,它将使用提供的可执行文件的大小。 Windows 在加载 PECOFF 可执行文件时似乎忽略了这个值,并且默认的 DOS stub 对额外数据没有任何用处。
请注意,可以使用 Microsoft 的链接器创建仅 1024 字节长的有效 PECOFF 可执行文件。这要求可执行文件只有一个部分,并且大小小于 512 字节。虽然 Windows 将加载并运行可执行文件,但 MS-DOS 将拒绝,因为文件大小小于 MZ header 中给出的 1168 大小值。
关于header - DOS header 中的 e_cblp 和 e_cp 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17196444/
我试图深入了解 DOS header ,但我坚持使用这些 header 。我知道唯一需要的字节是 MZ 签名和指向 PE 部分的指针,但我必须知道这两个到底是什么: USHORT e_cblp;
我是一名优秀的程序员,十分优秀!