vmware bios rom文件研究记录

Phoenix BIOS Tool 技术总结

一、ROM 结构

BIOS.440.ROM (512KB) 是 Phoenix BIOS 4.0 格式,包含:

  • BootBlock (BB.ROM): 最后 16KB,未压缩,启动引导代码
  • 模块区: 32个模块,使用 LZINT 压缩算法

二、模块提取流程

原始ROM → 按已知偏移提取 → 压缩模块文件 (.ROM/.AML/.PGX)

每个模块有固定的起始/结束地址(相对于 0x100000000 - ROM大小):

{"ROMEXEC0", 'X', 0, 0xFFFF0B25, 0xFFFF7749, ".ROM"},
{"BIOSCOD1", 'B', 1, 0xFFFCC446, 0xFFFD2BD7, ".ROM"},
// ... 等32个模块

三、解压流程

1. 模块头结构 (27字节)

[0-1]   Magic: 0x42 0x43 ("BC")
[2-3]   Signature: 0xD6 0xF1
[4-6]   Module ID
[8]     Module Type (0x42=BIOSCODE, 0x58=ROMEXEC, 0x47=DECOMPCODE)
[10]    Compression: 0x05=LZINT压缩, 其他=未压缩
[11-18] 地址信息
[19-22] 解压后大小

2. 解压方法

  • 使用 Phoenix 官方工具 UNINT32.EXE 解压 LZINT 数据
  • 解压后重建 BC 头(标记为未压缩)

3. 特殊处理: BIOSCOD0 BIOSCOD0 分成两部分存储在 ROM 中:

part1: offset=0x61150, size=3649
part2: offset=0x52BE1, size=40207

需要合并后再解压。

四、DMI 字符串修改

ROMEXEC0.ROM 可修改字段: | 字段 | 偏移 | 最大长度 | |------|------|----------| | manufacturer | 0x02749 | 12 | | product | 0x02765 | 23 | | vendor | 0x027CA | 17 | | board | 0x027E6 | 32 | | welcome | 0x028EE | 31 | | copyright | 0x02966 | 32 | | chipset | 0x06352 | 5 |

BIOSCOD1.ROM 可修改字段: | 字段 | 偏移 | 最大长度 | |------|------|----------| | bios_vendor | 0x0035 | 24 | | bios_version | 0x004E | 4 | | bios_date | 0x0053 | 10 | | sys_mfr | 0x007A | 12 | | sys_product | 0x0087 | 24 | | board_mfr | 0x00B9 | 17 | | board_product | 0x00CB | 32 | | RAM slots (64个) | 0x05A6起 | 14 |

不可修改字段(代码段,修改会导致无法启动):

  • ROMEXEC0: version (0x0375B), copyright2 (0x0377C)

五、打包流程

使用 Phoenix 官方工具:

1. PREPARE.EXE ROM.SCR   → 压缩模块,生成 .MOD 文件
2. CATENATE.EXE ROM.SCR -O:BIOS.440.ROM → 合并生成最终ROM

ROM.SCR 脚本格式:

BANKS         -N:1 -S:512
COMPRESS      LZINT
BOOTBLOCK     BB.ROM -S:16

BIOSCODE      BIOSCOD0.ROM
BIOSCODE      BIOSCOD1.ROM
ROMEXEC       ROMEXEC0.ROM
ROMEXEC       ROMEXEC1.ROM  -Z
...

六、工具使用

# 解包
pbt.exe extract BIOS.440.ROM output

# 随机化硬件信息
pbt.exe randomize output

# 打包
cd output
pbt.exe build ROM.SCR BIOS.440.ROM

七、嵌入工具

三个 Phoenix 官方工具以十六进制数组形式嵌入到 EmbeddedTools.hpp

  • UNINT32.EXE: LZINT 解压
  • PREPARE.EXE: 模块压缩
  • CATENATE.EXE: ROM 合并

运行时提取到临时目录,使用后自动删除。


这套工具实现了 Phoenix BIOS ROM 的完整解包、修改、打包流程,支持随机生成匹配的真实硬件配置信息。