C语言解析MS-DOS头时paragraph单位的大小是多少?
MS DOS MZ头中paragraph单位的准确解释
paragraph是x86实模式环境下的固定长度内存单位,和word集合没有绑定关系,固定为16字节。- 这个单位是MZ可执行格式定义时就确定的标准规则,不会因为你解析文件时使用的宿主机是32位、64位架构发生任何变化,和现代系统的内存分段、分页规则也没有关联。
- 定位DOS头结束位置的方法非常直接:读取
e_cparhdr字段的无符号整数值,将其乘以16,得到的结果就是DOS头从MZ文件起始偏移开始计算的总字节长度,跳过这段长度即可到达DOS头之后的内容区域。
补充背景:x86实模式的内存寻址逻辑为「段地址左移4位 + 偏移地址」,段地址的最小寻址粒度就是16字节,这就是paragraph单位的来源。绝大多数标准MZ可执行文件的
e_cparhdr字段值为4,对应DOS头总长度为64字节,和逆向分析中观测到的标准MZ头结构长度完全吻合。
内容的提问来源于stack exchange,提问作者sinavix742
相关产品推荐
相关产品推荐

