You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VxD(LE格式)代码与数据段的位置及大小确定问询

Windows 98 VxD LE格式文件核心字段与结构解析

一、LE头中标识代码页、数据页及其大小的字段

LE格式头里直接对应代码、数据页的关键字段如下:

  • 代码页相关:
    • CodePages:存储代码页的总数量
    • CodePageSize:单个代码页的字节大小(通常和你提到的MemPageSZ一致,即系统内存页大小)
    • CodeBase:代码段加载到内存后的基地址
  • 数据页相关:
    • DataPages:存储数据页的总数量
    • DataPageSize:单个数据页的字节大小(同样默认等于MemPageSZ)
    • DataBase:数据段加载到内存后的基地址
      另外你提到的MemPagesCtr和LastPageBytes,如果代码或数据的最后一页不满一个完整的MemPageSZ,LastPageBytes会记录该页的实际字节数,用来修正对应页的大小计算。

二、VxD的LE文件中代码与数据页的序列是否固定

是固定的。LE格式的VxD严格遵循固定的区块顺序:文件开头是LE头,紧接着是代码页区块,之后是数据页区块,最后才是重定位表、资源等辅助区块。这个顺序是LE格式规范强制要求的,方便Windows 9x的虚拟内存管理器快速定位并加载核心的代码与数据段。

三、如何确定实际代码入口和数据的起始位置

  • 代码入口点:
    直接读取LE头的EntryPoint字段,它记录的是相对于CodeBase的偏移量,内存中的实际代码入口地址 = CodeBase + EntryPoint。对于VxD来说,这个入口一般是Device_Init函数的起始位置,负责完成设备初始化。
  • 数据起始位置:
    内存中的数据起始位置直接由DataBase字段给出;如果要找文件中的偏移,计算方式为:文件头长度 + 所有代码页的总大小(CodePages * CodePageSize,若代码最后一页不满整页则用LastPageBytes替换对应页的大小),得到的结果就是数据页在文件中的起始偏移。

内容的提问来源于stack exchange,提问作者alt.126

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:15:37