computer 版 (精华区)

发信人: yahooboy (复活鸟), 信区: POPsoft
标  题: 让win2k合一可以启动的思路、方法及失败?snowpard
发信站: 听涛站 (Mon Oct 16 00:12:04 2000), 转信


目标:希望通过修改win2k 3in1的ISO,使得刻出的盘可以自启动,并且启动
      的时候可以显示类似NT OS Loader那样的菜单,然后选择安装不同的版本。

所需知识:
      相关工具软件的使用,汇编语言,可启动光盘的原理

所需工具:
      文本编辑器,用于编辑汇编程序
      调试工具,基本上debug即可
      反汇编工具,我用的是win32dasm,主要用于反汇编可启动win2k的引导头,即
                以前大家刻可引导win2k时用的那个boot.bin
      光盘分析程序,我用的是CDR Diagnostic,用于分析光盘的内容
      16进制文件编辑程序,用于修改ISO文件,我用的是Win HEX

参考资料:
      可启动光盘的格式,参见我上载到ftp.lib.pku.edu.cn/incoming/ISO_from_noid
      的文档cdrom7.pdf,下文假设你已经读懂了该文档
      另外还可参考[光碟烧录资讯站]http://zjun.027.net/cdr/,可能是台湾的

思路:
      根据可启动光盘的原理,把修改后的引导头添加的光盘上

注意:光盘的逻辑单位(我们暂且也叫它“扇区”)大小为根据mode而定一般2048个字节
方法:
      1. 在ISO中找一段空地方,这个很简单,0~15扇区都是空的。
      2. 分析win2k可引导光盘的引导头,需要化大功夫,做如下改动:
                a. 由于它缺省是从\i386下读setup loader--setupldr.bin,
                   所以要增加代码,使得它可以从层层子目录去读,注意这
                   时是直接读光盘,没有文件系统可用。这个比较繁,需要
                   耐心和恒心。
                b. 在合适的地方加跳转,跳到自己的菜单程序,这个地方最
                   好在引导头完成各种出错检查后再做。需要注意的是,尽
                   管引导头后面有很多空的地方可以加程序,但是要注意在
                   自己的程序和引导头之间要有足够的距离,因为引导头要
                   在这里放一些数据,当自己的菜单程序获得用户的选择后
                   要修改引导头中的一些数据和指令,使得它可以找到相应
                   的目录,然后跳转回引导头
                c. 因为菜单程序要放到引导头的后面,所以在编写菜单程序
                   时在程序开始就做一个跳转,在跳转,在跳转的后面加足
                   够的空数据,编译连接好的文件用winhex直接拷贝数据后
                   面的代码,到引导头,这样做的好处是所有的绝对地址都
                   不用变。

失败原因:
      菜单程序已经可以显示出来了,但是由于最终执行引导的是setupldr,它无法知道
      从哪个目录读文件,所以失败。当然如果有高人愿意改它或许会成功,但是要注意
      3in1上可能只有一个该文件的拷贝,这样就需要引导头向它传递参数,而且鬼知道
      后面还有没有目录问题。

其它:
      当然,如果仅仅让3 IN 1可以启动,那么加一个98的引导即可,甚至还可以作一个
      引导后的autoexec中的菜单(和上文说的菜单性质不一样),选择执行不同目录
      下的winnt.exe,但是这对我来说没有意义,或者说I don;t like it.  :(


以上是我的一些心得,如果有什么不明白的请不要给我写信,我很忙又很懒,不会回
的,大家可以在版面上讨论。另外,上面提到的软件到处都有,不要找我要。
--

--
※ 来源:.听涛站 cces.net.[FROM: 匿名天使的家]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.479毫秒