小華的部落格: 2008/5/18 - 2008/5/25

搜尋此網誌

星期一, 5月 19, 2008

DOS Dump

之前寫了一個Windows版的Dump BIOS工具,所以順便寫一個DOS版的工具,不過我沒把讀取到的BIOS資料輸出到檔案,而只有顯示在螢幕上,如果大家有興趣可以下載回去看看。

不寫到檔案的原因在於DOS存取USB隨身碟要ㄧ段時間,所以我就沒做這部份的功能,但是如果大家有興趣把BIOS內容存到隨身碟然後在慢慢分析,你可以試著使用DOS重新導向功能來達到這個目的。

使用DOS重新導向的做法如下,不過我要事先提醒你,很花時間喔!!!

C:\> Dosdump /4k > BIOS.bin (輸出4k大小的BIOS內容到BIOS.bin檔案中)

這邊說的4K是指,從FFFF_FFFF往下算4K Bytes

DOSDump.exe
Usage:

Arg1 :
/Byte /word /dword 只顯示256 Bytes ,只是自己好玩,模仿一下不同格式的顯示!
/4k /64k /128k /512k/1M/2M 看你要多大就設定多大

Arg2: /p 顯示的時候要不要等待按鍵,如果你想慢慢看,你可以用這個參數

EX1:
C:\> DOSDUMP /4k /p

EX2:
C:\>DOSDUMP /2M

工具與原理:
我是使用DOS的C語言編譯器去寫的,因為是16 bit編譯器,所以要自己切換CPU工作模式,做法如同BigRealmode方式只是換成C的寫法而已,而副程式是採用__emit__(); 方式內崁機器碼的方式撰寫! 以避免16 bit編譯器無法使用"32bit暫存器的問題",例如: EAX..

點我下載

補充
放一個新版的DOSDump v1.0,增加一個小功能,你可以用來指定你要看的記憶體位址的內容,或是針對某個範圍內去搜尋某個字串。

/a : Start Address
/s: size (Hex)
/f:find string
/p: pause

ex1: 在FFE00000~FFFFFFFF內搜尋字串"_DMI" ,如果有找到則顯示起始位址開始的256 bytes. ,假如找到的位址在FFEB0000h,則會顯示FFEB0000h~FFEB00FFh的內容。

DOSDump /a:FFE00000 /s:200000 /f:_DMI

ex2: 顯示某個位址開始,大小為4K的內容,且每256 bytes暫停一下
DOSDump /a:F0000 /s:1000 /p

新版的工具,請點我下載

※請在DOS環境使用
※參數後面直接打16進制的位址,請不要加0x..或是xxxh 因為我沒防呆喔!
※工具寫的很陽春,沒有防呆,也沒錯例外處理,所以請多多包涵! ^^