GRUB4DOS(九)常用设备类型及map命令用法示例
設(shè)備類型:
(fd0)? ?? ? 第一個(gè)軟盤
(fd1)? ?? ? 第二個(gè)軟盤
(hd0)? ?? ? 第一個(gè)硬盤
(hd1)? ?? ? 第二個(gè)硬盤
(hd-1)? ?? ?最后一個(gè)硬盤
(hd)? ?? ???最后一個(gè)硬盤之后的硬盤號(hào)碼,創(chuàng)建新的虛擬硬盤時(shí)使用
(cd0)? ?? ? 第一個(gè)光驅(qū),相當(dāng)于 (hd32),由 cdrom --init 創(chuàng)建
(cd1)? ?? ? 第二個(gè)光驅(qū),相當(dāng)于 (hd33),由 cdrom --init 創(chuàng)建
由于 cdrom 的識(shí)別能力太低,同時(shí)市場上的光驅(qū)設(shè)備幾乎全被U盤代替,所以 (cd?) 這種格式可能面臨淘汰。
(hd0,0)? ???第一塊硬盤的第一主分區(qū)
(hd0,4)? ???第一塊硬盤的第一擴(kuò)展分區(qū)
(hd-1,0)? ? 最后一塊硬盤的第一主分區(qū),沒有 (hd-2,0) 這種格式,也沒有 (hd-1,-1) 這種格式。
(hd#,0)? ???第一主分區(qū)(在硬盤#上)
(hd#,1)? ???第二主分區(qū)(在硬盤#上)
(hd#,2)? ???第三主分區(qū)(在硬盤#上)
(hd#,3)? ???第四主分區(qū)(在硬盤#上)
(hd#,4)? ???第一邏輯分區(qū)(在硬盤#上)
(hd#,5)? ???第二邏輯分區(qū)(在硬盤#上)
(hd#,6)? ???第三邏輯分區(qū)(在硬盤#上)
(hd#,7)? ???第四邏輯分區(qū)(在硬盤#上)
(hd32)? ?? ?第一個(gè)光驅(qū)
(hd33)? ?? ?第二個(gè)光驅(qū)
(0xFF)? ?? ?最后一個(gè)光驅(qū)(hd127)
()? ?? ?? ? 當(dāng)前磁盤
(bd)? ?? ???初始啟動(dòng)設(shè)備(設(shè)備包括磁盤和驅(qū)動(dòng)器)
(cd)? ?? ???從光盤啟動(dòng)后,Grub4Dos 捕獲到的啟動(dòng)光盤,如果不是從光盤啟動(dòng),則沒有 (cd) 設(shè)備
(ud)? ?? ???Fbinst 啟動(dòng)方式制作的隱藏分區(qū)
(pd)? ?? ???PXE 網(wǎng)絡(luò)啟動(dòng)設(shè)備
(nd)? ?? ???網(wǎng)絡(luò)驅(qū)動(dòng)器,現(xiàn)已不常用(nd 已經(jīng)不存在了,已經(jīng)被pd代替)
(md)? ?? ???內(nèi)存驅(qū)動(dòng)器,實(shí)現(xiàn)了將整個(gè)內(nèi)存作為一個(gè)磁盤驅(qū)動(dòng)器來訪問
(rd)? ?? ???隨機(jī)存貯驅(qū)動(dòng)器。(md) 設(shè)備訪問內(nèi)存是從物理地址 0 開始,而 (rd) 可以訪問起始于任何基地址的內(nèi)存
以數(shù)字命名的設(shè)備:
fd0 - fd126? ? :? ???0x0 - 0x7E??(軟盤和虛擬軟盤,排除 0x21 和 0x23)
pxe? ?? ?? ?? ?:? ???0x21? ?? ???(網(wǎng)絡(luò)啟動(dòng)設(shè)備)
ud? ?? ?? ?? ? :? ???0x23? ?? ???(Fbinst 隱藏分區(qū))
rd? ?? ?? ?? ? :? ???0x7F? ?? ???(隨機(jī)存貯驅(qū)動(dòng)器)
hd0 - hd30? ???:? ???0x80 - 0x9E (硬盤和虛擬硬盤)
cd? ?? ?? ?? ? :? ???0x9F? ?? ???(捕獲到的啟動(dòng)光盤,這個(gè)不一定正確,視 bios 而定)
hd32 - hd127? ?:? ???0xA0 - 0xFF (光盤和虛擬光盤)
設(shè)備后面跟隨 +1 表示將設(shè)備的第 1 個(gè)扇區(qū)當(dāng)作一個(gè)單一的文件看待:
(hd0)+1? ???將整個(gè)硬盤的第一個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 1 個(gè)扇區(qū))
(hd0,0)+1? ?將整個(gè)分區(qū)的第一個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 1 個(gè)扇區(qū))
(fd0)+1? ???將整個(gè)軟盤的第一個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 1 個(gè)扇區(qū))
(cd0)+1? ???將整個(gè)光盤的第一個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 1 個(gè)扇區(qū))
(md)+1? ?? ?將整個(gè)內(nèi)存的第一個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 1 個(gè)扇區(qū))
(rd)+1? ?? ?這個(gè)比較特殊,將指定內(nèi)存的所有內(nèi)容當(dāng)作一個(gè)文件
[注意:(rd)+1 這個(gè)標(biāo)志始終代表文件,它包含存儲(chǔ)在 (rd) 中的所有字節(jié)。 ]
同樣可以使用 +2、+3 等,表示將前 2 個(gè)或前 3 個(gè)扇區(qū)當(dāng)作單一的文件看待:
(hd0)+2? ???將整個(gè)硬盤的前 2??個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 2??個(gè)扇區(qū))
(hd0,0)+3? ?將整個(gè)分區(qū)的前 3??個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 3??個(gè)扇區(qū))
(fd0)+5? ???將整個(gè)軟盤的前 5??個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 5??個(gè)扇區(qū))
(cd0)+10? ? 將整個(gè)光盤的前 10 個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 10 個(gè)扇區(qū))
(md)+32? ???將整個(gè)內(nèi)存的前 32 個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 32 個(gè)扇區(qū))
(rd)+2? ?? ?將指定內(nèi)存的前 2??個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 2??個(gè)扇區(qū))
也可以使用類似 32+5 的方法:
(hd0)512+2??將整個(gè)硬盤的第 512 個(gè)扇區(qū)之后的 2??個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 2 個(gè)扇區(qū))
(hd0,0)32+3 將整個(gè)分區(qū)的第 32??個(gè)扇區(qū)之后的 3??個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 3 個(gè)扇區(qū))
(fd0)1+1? ? 將整個(gè)軟盤的第 2? ?個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 1??個(gè)扇區(qū))
(cd0)128+1??將整個(gè)光盤的第 129 個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 1??個(gè)扇區(qū))
(md)0+32? ? 將整個(gè)內(nèi)存的前 32??個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 32 個(gè)扇區(qū))
(rd)0+1? ???等效于 (rd)+1,將指定內(nèi)存的所有內(nèi)容當(dāng)作一個(gè)文件
關(guān)于 (rd) 設(shè)備:
(rd) 設(shè)備只是對內(nèi)存區(qū)域的引用,(rd) 設(shè)備所引用的內(nèi)存區(qū)域是不被保護(hù)的,你可以將 (rd) 理解為指向內(nèi)存塊的指針。在 Grub4Dos 中,很多東西都是自由的、無保護(hù)的、沒有限制的,(rd) 就是其中之一。
(rd) 不是一個(gè) int13 設(shè)備,而僅僅是一個(gè) grub4dos 設(shè)備。在 grub4dos 里面,存在 (rd) 設(shè)備,但進(jìn)入 DOS 以后,就沒有 (rd) 設(shè)備了。
(rd)+1 始終表示 (rd) 設(shè)備的整個(gè)內(nèi)容,而不是第一個(gè)扇區(qū)。
通過下面的地址可以獲取 (rd) 設(shè)備的信息:
set /a rdnum=*0x82CC? ? # (rd) 設(shè)備的設(shè)備號(hào)
set /a rdbase=*0x82D0? ?# (rd) 設(shè)備的起始地址
set /a rdsize=*0x82D8? ?# (rd) 設(shè)備的總長度
通過下面的方法可以自由設(shè)置 (rd) 設(shè)備的信息:
map --ram-drive=0xFF7F? ?? ?# 修改 (rd) 設(shè)備的設(shè)備號(hào)
map --mem --rd-base=50000? ?# 設(shè)置 (rd) 設(shè)備的起始地址
map --mem --rd-size=30000? ?# 設(shè)置 (rd) 設(shè)備的總長度
下面的命令僅僅修改了 (rd) 設(shè)備的信息:
map --mem /FILE (rd)
這里的 (rd) 指向了一塊內(nèi)存區(qū)域,這塊內(nèi)存區(qū)域中存放了 /FILE 文件的內(nèi)容,但是這塊內(nèi)存是不被保護(hù)的,這塊內(nèi)存隨時(shí)都可能被其他代碼修改,甚至被 Grub4Dos 自身修改。
下面的命令也修改了 (rd) 設(shè)備的信息,但是 (rd) 指向的內(nèi)存區(qū)域是受保護(hù)的,因?yàn)樗?(fd0) 重疊,而 (fd0) 是受保護(hù)的:
map --mem /FILE (rd)
map --mem /FILE (fd0)
map --hook
如果第一條命令和第二條命令交換一下順序,那么結(jié)果就不一樣了。
什么情況下需要使用 (rd) 設(shè)備?當(dāng)你需要它的時(shí)候就去用它,如果你實(shí)在不知道什么時(shí)候需要用到 (rd),那么很簡單,不要用它。
==============================
map --status
顯示磁盤仿真的狀態(tài)。
map /PE.ISO (0xFF)
map --hook
將 /PE.ISO 映射到 (hd127) 仿真磁盤,/PE.ISO 必須在磁盤中連續(xù)存放,不能有碎片。
map --mem /PE.ISO (0xFF)
map --hook
先將 /PE.ISO 加載到內(nèi)存,然后再映射到 (hd127) 仿真磁盤,/PE.ISO 可以有碎片。
map --mem=-2880 /FLOPPY.IMG (fd0)
map --hook
先將 /FLOPPY.IMG 加載到內(nèi)存,然后再映射到 (fd0) 仿真軟盤,(fd0) 將占用至少 1440KB 的內(nèi)存。
map --mem --top /PE.ISO (0xFF)?
map --hook
將 /PE.ISO 加載到高端內(nèi)存,然后再映射到 (hd127) 仿真磁盤,把鏡像加載到高位內(nèi)存就不能使用 gzip 壓縮,兩者不能同時(shí)實(shí)現(xiàn)。
在 grub4dos 中,內(nèi)存在 3.25G 處被分成了高端內(nèi)存和低端內(nèi)存兩端,鏡像不能跨 3.25G 這個(gè)點(diǎn)。如果你的內(nèi)存小于 3.25G,你就沒有高端內(nèi)存可用。?
map --unmap=0xFF
map --rehook
卸載 (hd127) 仿真磁盤。不能使用 --unmap=(0xFF) 的方法卸載,--unmap= 后面必須是數(shù)字。
--rehook 用于停止仿真盤并釋放內(nèi)存,相當(dāng)于 --unhook 然后 --hook(這樣看來,map --unhook 命令似乎不會(huì)被單獨(dú)使用了)
map --unmap=0,0x80,0xFF
map --rehook
卸載多個(gè)仿真磁盤。
map --unmap=0:0xFF
map --rehook
卸載所有仿真磁盤。
如果要通過設(shè)備名的方法卸載某個(gè)設(shè)備,可以這樣做:
map (hd127) (hd127)
map --rehook
map --read-only /FLOPPY.IMG (fd0)
map --hook
(fd0) 只能讀,不能寫,防止 /FLOPPY.IMG 文件被破壞。
映射到仿真盤中的文件都是可以修改的,無論是 IMG、ISO、VHD 等,除非使用 --read-only 參數(shù)。
map --fake-write /FLOPPY.IMG (fd0)
map --hook
(fd0) 處于假寫狀態(tài),可以寫入數(shù)據(jù),但并未記錄到 (fd0) 上,防止 /FLOPPY.IMG 文件被破壞。
map --unsafe-boot /FLOPPY.IMG (fd0)
map --hook
這個(gè)參數(shù)不知道是什么作用,大概是允許修改 (fd0) 的引導(dǎo)扇區(qū)。
map ---disable-chs-mode /FLOPPY.IMG (fd0)
map --hook
禁用 (fd0) 的 CHS 訪問功能。
map --disable-lba-mode /FLOPPY.IMG (fd0)
map --hook
禁用 (fd0) 的 LBA 訪問功能。
map 命令還可以用來修改 (rd) 隨機(jī)存儲(chǔ)器的信息,上面已經(jīng)說過了。
[注:其他 map 參數(shù)似乎不怎么常用,也不太理解其含義,這里就不總結(jié)了]
[注意:在map命令行中,(hdm,n)+1 式的寫法被解釋成代表整個(gè)(hdm,n)分區(qū),而不僅僅是此分區(qū)的第一扇區(qū)。]
[注意:--unhook 的仿真盤,如果沒有 --unmap,則在需要的時(shí)候會(huì)自動(dòng) --hook。]
==============================
關(guān)于 map 命令的磁盤交換:
# 打算把當(dāng)前設(shè)備映射為(hd0)?
map () (hd0)
# 打算把(hd0)映射為當(dāng)前設(shè)備
map (hd0) ()
#開始執(zhí)行映射
map --rehook
總結(jié)
以上是生活随笔為你收集整理的GRUB4DOS(九)常用设备类型及map命令用法示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 到了这个点不建议“割肉”
- 下一篇: linux内核溢出利用,窖藏15年新鲜出