近日对这个短小精悍且兼容性极佳的XP启动引导文件多重启动菜单十分感兴趣,特意还做了张17合1的XP OEM安装光盘,光盘总容量701MB。由于本人安装光盘的文字菜单部分较长,为了最大化利用有限的资源,不得不对其进行分析一番。

先看下本人已经挪位修改的目录描述
3edd751ex7247f87ead1a&690.jpg
当前起始位置为7B8,结束位置为7FD,总共70字节,去掉菜单项描述(7B8)1字节、目录字节宽度描述(7B9)1字节,剩68字节,最多可以有17个菜单项。
3edd751ex76cfb6bd06f3&690.jpg
修改 0000011C: 3A06B807 cmp al,[07B8] //指向新的菜单数描述

修改 00000126: A2B707 mov [07B7],al //指向新的临时变量地址

加亮部分简单分析:判断键盘输入的AL寄存器,是否在“A~Z”之间,通过“and al,1F”,得出一个值,当小于等于菜单数描述,就将值存入7B7H。
3edd751ex76cfb8428c9d&690.jpg

修改 0000049C: A0B707 mov al,[07B7] //取出临时变量的值,即菜单项
修改 0000049F: F626B907 mul b,[07B9] // al(菜单项)和7B9(目录字节宽度)相乘,得到偏移量,存放于ax寄存器
修改 000004A3: 05BA07 add ax,007BA //偏移量和7BA相加,得出菜单项相对应的目录名称的地址,并把这个地址存入536H,所以想把53BH菜单往前挪位,比较困难。

按照这个规律,便可弹性的调整菜单字节长度和目录长度的矛盾,轻松实现挪位操作。

标签: none

添加新评论