首先在讲AMI BIOS模块结构前 需要向大家说一样东西 就是逻辑地址 逻辑地址的形式如:XXXX:XXXX 其中前四位是段地址 后四位是偏移地址 比如ABCD:1234 物理地址=段地址*10H+偏移地址 所以ABCD:1234的物理地址=ABCDH*10H+1234H=ACF04H 而ACF04H这个物理地址是相对于1M噶地址空间的 如果你的BIOS大小是1M噶话 那么物理地址就是ACF04H 如果BIOS不是1M的话 那么就要对物理地址进行换算 好 有条公式: BIOS文件在WINHEX中的地址 = BIOS文件相对于1M空间的地址 - 常数 注:常数是根据每个BIOS的大小而确定的 常数=(1024-你BIOS的大小(KB))*1024 比如你的BIOS是512KB的话 那么常数就是 常数=(1024-512)*1024=524288D=80000H 所以ABCD:1234在512KB的BIOS中 BIOS文件在WINHEX中的地址就=ABCDH*10H+1234H-80000H=2CF04H OK 现在各位应该明白逻辑地址转化为物理地址的方法了
用WINHEX打开AMI BIOS可以搜索到AMIBIOSC的字符串 这里隐含很多秘密 如下:(这个BIOS 512KB的)
用WINHEX打开AMI BIOS可以搜索到AMIBIOSC的字符串 这里隐含很多秘密 如下:(这个BIOS 512KB的) Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00067FE0 00 00 00 00 00 00 00 00 08 0A 41 4D 49 42 49 4F ..........AMIBIO 00067FF0 53 43 30 38 30 30 06 CE 21 40 BC 75 0C 00 83 E7 SC0800.?@紆..冪
这里一共20H 具体结构如下: 0-2H 保留供将来使用 3H 一般都是00 如果不是00的话 发BIOS给我 4-5H BIOS映像版本 8H 都是08的 9H 都是0A的 (AMIBIOSC08的长度) A-13H AMIBIOSC 14-17H BIOS 核心版本 18-1BH BIOS校验位 1C-1DH 第一个模块的偏移地址 1E-1FH 第一个模块的段地址
由此可知 在这个BIOS里面第一个模块的逻辑地址是 E783:000C 所以物理地址=E7830H+000CH-80000H=6783CH 6783CH-8H就是第一个模块的地址了 至于为什么要-8H 你自己看一下就知道了 OK 第一个模块的地址找到了 继续研究一下第一个模块的头部 看看有什么秘密 Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00067830 00 FF FF FF 98 07 00 00 F3 C3 B9 AA 10 00 1B E2 00067840 98 07 08 80 00 00 00 00 01 00 0C 00 20 35 01 00
其中 红色部分的14H就是模块头了 单独提取出来 Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00000000 98 07 00 00 F3 C3 B9 AA 10 00 1B E2 98 07 08 80 00000010 00 00 00 00
0-3H 模块大小 4-7H 校验位 8-9H 下一个模块的偏移地址 A-BH 下一个模块的段地址 C-DH 模块大小 EH 模块ID FH 模块属性
由此可知该模块的模块大小是0798H 校验位AAB9C3F3 下一个模块的地址为E21B:0010 模块ID为08 从此可以得知下一个模块的位置 如此类推 ...................... 直到最后一个模块
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00000FD0 44 00 00 00 92 9F 03 15 FF FF FF FF 44 00 80 80 00000FE0 00 00 00 00 07 00 10 02 01 00 00 14 00 20 08 01
红色的就是模块头 最后一个模块的模块头的8-BH都是FF FF FF FF的 表示是最后一个模块了 OK AMI BIOS模块机构详解到此完毕
|