- 论坛徽章:
- 0
|
附录一:修改Solaris的独霸启动,使其可以从其它的Os Loader启动,作者 1楼 at CSDN
发在 ITPUB 的改进版 ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++
找到啦(自己掂量着办吧)
修改Solaris的独霸启动,使其可以从其它的Os Loader启动.
它有两个地方使得其不能与其它的Loader合作,分区引导记录和引导块,
分别对应/usr/platform/i86pc/lib/fs/ufs/PBoot,BootBlk两个文件.
1.分区引导要求Solaris8是当前活动分区:
84: bb 7f be mov bx,7fbe ;分区表首址
b9 00 04 mov cx,0004 ;搜索活动分区
80 3f 80 aga:cmp byte ptr[bx],80h ;80h活动分区标志
74 0d je ok
83 c3 10 add bx,10h
e2 fb loop aga
.
.
.
9c: 66 8b 4f 08 mov ecx,[bx+8] ;活动分区首址
修改为:
84: bb 7f c2 mov bx,7fc2 ;搜索Solaris分区标志
b9 00 04 mov cx,0004 ;搜索活动分区
80 3f 82 aga:cmp byte ptr[bx],82h ;82h,Solaris分区标志
74 0d je ok
83 c3 10 add bx,10h
e2 fb loop aga
.
.
.
9c: 66 8b 4f 04 mov ecx,[bx+4] ;solaris分区首址
2.引导块记录
:0b53 e8 00 7a call sub_calp
:0b56 83 c4 02 add sp,2
:0b59 48 dec ax
:0b5a 74 71 jz only_onep -->(eb 71)jmp only_onep
关键让它以为只有一个分区,则引导块程序不会让你去选择启动那个分区.
而且已改动Solaris不是当前活动分区,则你不论怎样选,它都去加载当前
活动分区,没法选的.这样改是比较便宜的做法.
3.起作用
#installboot /maybed/pboot /maybed/bootblk /dev/rdsk/c0d0s2
Ok!enjoy it.
错了别找我啊!
发在 CSDN 的原文 ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
修改Solaris的独霸启动,使其可以从其它的Os Loader启动.
它有两个地方使得其不能与其它的Loader合作,分区引导记录和引导块,
分别对应/usr/platform/i86pc/lib/fs/ufs/PBoot,BootBlk两个文件.
1.分区引导要求Solaris8是当前活动分区:
84: bb 7f be mov bx,7fbe ;分区表首址
b9 00 04 mov cx,0004 ;搜索活动分区
80 3f 80 aga:cmp byte ptr[bx],80h
74 0d je ok
83 c3 10 add bx,10h
e2 fb loop aga
修改为:
84: bb 7f ee mov bx,7fee[注] ;直接Solaris分区表址
90 90 90 nop,nop,nop ;
90 90 90 nop,nop,nop
eb 0d jmp ok
83 c3 10 add bx,10h
e2 fb loop aga
[注]与具体分区表项位置有关,1-->7fbe,2-->7fce,3-->7fde,4-->7fee
2.引导块记录
:0b53 e8 00 7a call sub_calp
:0b56 83 c4 02 add sp,2
:0b59 48 dec ax
:0b5a 74 71 jz only_onep --> (eb 71)jmp only_onep
关键让它以为只有一个分区,则引导块程序不会让你去选择启动那个分区.
而且已改动Solaris不是当前活动分区,则你不论怎样选,它都去加载当前
活动分区,没法选的.这样改是比较便宜的做法.
3.起作用
#installboot /maybed/pboot /maybed/bootblk /dev/rdsk/c0d0s2
Ok!enjoy it.
另外,你可以直接下载我已改好的
ftp://solar.pmo.ac.cn/pub/sol8.i86/multiBoot
-----------------------------------------------------------------------------
附录二:[原创] 修改Solaris默认启动分区及timeout时间,作者 Zhjx at ChinaUnix
修改Solaris引导程序的默认启动分区及timeout时间
一、分析
对Solaris引导程序进行分析,并说明采用的修改方式
本人硬盘分区如下:
1. Windows 2000 主分区 5G
2. Winnt 4.0 主分区 1G
3. Big Dos Extend 扩展分区 剩下的全部空间
4. Solaris 主分区 2G
------------------------------------------------
5. 逻辑分区1
6. 逻辑分区2
7. 逻辑分区3
....
用Solaris的引导程序来进行多系统引导。但比较麻烦的是我经常用Windows 2000,而Solaris
的引导程序总是默认引导Solaris分区。
后来通过修改引导块记录(BootBlk)实现默认启动Windows2000。分析BootBlk引导过程如下:
xxxx E8 0238 call sub_20 ; 显示引导分区列表供选择,30秒内无选择,则默认引导Solaris
....
xxxx 0B C0 or ax,ax ; Zero ?
xxxx 75 3C jnz short loc_93 ; no zero -- 表示用户有选择其他分区
xxxx loc_91::
xxxx .... ; Zero -- 表示用户选择Solaris。直接按'ESC'或'ENTER'或键入'4','ENTER'
显示开始引导Solaris分区的信息
xxxx loc_92::
xxxx 5E pop si
xxxx C9 leave ; Procedure exit
xxxx C3 retn
xxxx 90 nop
xxxx loc_93::
xxxx FF 76 FE push word ptr [bp-2] ; word ptr [bp-2] -- 用户选择的分区的地址
xxxx 8B 46 FC mov ax,[bp-4] ; word ptr [bp-4] -- 用户选择的是第几个分区
xxxx 48 dec ax
xxxx 50 push ax
xxxx E8 04DB call sub_24 ; 修改活动分区
xxxx 83 C4 04 add sp,4
xxxx 8A 56 06 mov dl,[bp+6]
xxxx FF 1E D50C call dword ptr ds:D50C ; 引导用户分区
xxxx loc_94::
xxxx 5E pop si
xxxx C9 leave ; Procedure exit
xxxx C3 retn
sub_17 endp
修改原理:
在0B7C处加入一段代码:先要判断用户是否键入'4','ENTER',如是,则用户要引导Solaris,
直接转到0BB4处return;否则设置[bp-2]及[bp-4],转到loc_92处。修改后, 直接按'ESC'或
'ENTER'会引导自定分区,不会引导Solaris。
修改内容:
用下面的代码替换从loc_91开始的代码,
xxxx 0B C0 OR AX,AX
xxxx 75 3C JNZ short loc_93
xxxx A1 08 D5 MOV AX,[D508]
xxxx 39 46 FC CMP [BP-04],AX
xxxx 74 30 JZ short loc_92
xxxx C7 46 FC 01 00 MOV WORD PTR [BP-04],0001 ; 0001 -- 设置默认引导第一个分区
xxxx 8B 46 FC MOV AX,[BP-04]
xxxx 48 DEC AX
xxxx C1 E0 04 SHL AX,4
xxxx 01 46 FE ADD [BP-02],AX
xxxx 8B 46 FE MOV AX,[BP-02]
xxxx 89 46 04 MOV [BP+04],AX
xxxx EB 1D JMP short loc_93
二、修改方法1
直接修改硬盘Solaris引导扇区。
1. 修改默认引导分区 (扇区号为说明方便,以本人机器为例)
查看分区表找到Solaris分区第一个扇区(10237248),加上8即为要修改的扇区(10237256),
确认偏移017c处为 6A 1B E8 77 1B 83 C4 02,如果相同则修改为
A1 08 D5 39 46 FC 74 30 C7 46 FC 01 00 8B 46 FC 48 C1 E0 04 01 46 FE 8B 46 FE 89 46 04 EB 1D。
2. 修改Timeout,由30秒改为8秒
Solaris分区首扇+28为10237276,确认偏移04A处为1E,修改为08,即可。
三、修改方法2
修改Boolblk文件,然后用installboot安装引导程序。
1. 修改默认引导分区
确认偏移0b7c处为 6A 1B E8 77 1B 83 C4 02,如果相同则修改为
A1 08 D5 39 46 FC 74 30 C7 46 FC 01 00 8B 46 FC 48 C1 E0 04 01 46 FE 8B 46 FE 89 46 04 EB 1D。
2. 修改Timeout,由30秒改为8秒
确认偏移324A处为1E,修改为08,即可。
3. re-install BootBlk
#installboot /usr/platform/i86pc/lib/fs/ufs/pboot /usr/platform/i86pc/lib/fs/ufs/bootblk /dev/dsk/c0d0s2
四、说明
本人为 Solaris 8 2/02,采用Software #1 安装,没有x86 Boot分区。
操作时一定要小心,分区表一定要备份到软盘或其他移动存储介质上,重要数据最好也要
的备份,以防万一。
不当之处还望指正!
Zhjx@sina.com
2002.09.01
-----------------------------------------------------------------------------
附录三:作者在原文里没有把修改前后的代码贴出来,我用 Biew 抓了下面的文字记录。
它是跟 Hiew 类似的工具,提供跨平台的版本,而且某些小功能使用更加顺手。
修改前的 Biew 反汇编 ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++
;Boot Solaris partition no matter which one is active. Load Solaris directly.
00000B78: 0BC0 or ax,ax
00000B7A: 753C jne file:00000BB8
00000B7C: 6A1B push (w) +1B
00000B7E: E8771B calln file:000026F8
00000B81: 83C402 add (w) sp,+02
00000B84: 666800001B00 push 001B0000
00000B8A: 6A00 push (w) +00
00000B8C: FF3610D5 push (w) [+D510]
00000B90: 6A52 push (w) +52
00000B92: 1E push ds
00000B93: 68AE04 push 04AE
00000B96: E8DB1B calln file:00002774
00000B99: 83C40E add (w) sp,+0E
00000B9C: 666800001B00 push 001B0000
00000BA2: 6A02 push (w) +02
修改后的 Biew 反汇编 ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++
;Boot first partition no matter which one is active. Load first one directly.
00000B78: 0BC0 or ax,ax
00000B7A: 753C jne file:00000BB8
00000B7C: A108D5 mov ax,[+D508]
00000B7F: 3946FC cmp [bp-04],ax
00000B82: 7430 je file:00000BB4
00000B84: C746FC0100 mov [bp-04],0001
00000B89: 8B46FC mov ax,[bp-04]
00000B8C: 48 dec ax
00000B8D: C1E004 shl (w) ax,04
00000B90: 0146FE add [bp-02],ax
00000B93: 8B46FE mov ax,[bp-02]
00000B96: 894604 mov [bp+04],ax
00000B99: EB1D jmps file:00000BB8
00000B9B: 0E push cs
00000B9C: 666800001B00 push 001B0000
00000BA2: 6A02 push (w) +02
----------------------------------------------------------------------------- |
|