[DOS/Windows] 使用 debug 指令產生簡單的二進位檔案

[DOS/Windows] 使用 debug 指令產生簡單的二進位檔案

今天臨時在 Windows 上面需要產生一個小的二進位 (binary) 檔案,

當然如果手上有 HexEditUltraEdit 的話會很容易,

不過問題是那台 Windows 虛擬機器很陽春,

幾乎什麼都沒有,有什麼比較簡單的方法呢?

 

這時想到了很久以前學組合語言時用過的 debug 指令~

debug 指令在每台 DOS/Windows 機器上都有,因此一定可以用~

 

1. 在命令列視窗中執行 debug

執行之後會進到 debug 程式的畫面中,鍵入 ? 可以看一下支援的指令:

C:\>debug
-?
assemble     A [address]
compare      C range address
dump         D [range]
enter        E address [list]
fill         F range list
go           G [=address] [addresses]
hex          H value1 value2
input        I port
load         L [address] [drive] [firstsector] [number]
move         M range address
name         N [pathname] [arglist]
output       O port byte
proceed      P [=address] [number]
quit         Q
register     R [register]
search       S range list
trace        T [=address] [value]
unassemble   U [range]
write        W [address] [drive] [firstsector] [number]
allocate expanded memory        XA [#pages]
deallocate expanded memory      XD [handle]
map expanded memory pages       XM [Lpage] [Ppage] [handle]
display expanded memory status  XS

 

2. 填入資料

執行 e 100 就可以在位址 100h 的地方開始填入資料…

這邊的 100h 其實是很久以前的 MS-DOS 時代,.COM 檔的起始位址。

.COM 檔算是沒有檔頭的執行檔,因此我們現在就是把想填的值,

填到 100h 開始的地方,最後再把填好的部分儲存成檔案就行了~

-e 100
0B20:0100  31.41   32.42   33.43   34.44   35.45

 

當執行 e 100 之後,debug 程式會跳出目前在 100h 位址的值 (本例中是 31),

不要管它是什麼,只要輸入想要的值 (以十六進位表示) 就行了,

像我想輸入 ABCDE 五個字元,相對應的十六進位是 41 42 43 44 45,

在輸入 41 之後按空白鍵,就會跳到下一個位址 (101h),

再輸入 42 後再按空白鍵,依此類推,將所有的值都填好~

 

3. 儲存成檔案

要儲存檔案時,需要用指令 n 先指定檔案名稱:

-n test.bin

 

接著設定檔案的長度,debug 會用 cx 這個暫存器儲存的值當作要寫入的長度,

執行 r cx 可以看目前的設定,也可以修改,

本例中因為輸入了五個字元,因此將 cx 暫存器設定成 5:

-r cx
CX 0000
:5
-r cx
CX 0005

 

再執行 w 指令寫入,後面的參數代表要從哪個位址開始讀資料,

寫入的長度就是 cx 設定的值~

都成功的話,執行 q 就可以離開:

-w 100
Writing 00005 bytes
-q

 

4. 檢查剛寫好的二進位檔案

用 dir 可以看到剛剛寫出來的檔案,大小確實是 5 bytes,

而內容也的確是我們寫入的 ABCDE:

C:\>dir test.bin
Volume in drive C has no label.
Volume Serial Number is 3A53-E7A7
Directory of C:\
02/02/2015  10:33 PM                 5 TEST.BIN
1 File(s)              5 bytes
0 Dir(s)   5,944,954,880 bytes free
C:\>type test.bin
ABCDE

 

這個例子只是為了 demo 方便,因此寫入了一個可見的字串 ABCDE…

要用 debug 寫出一個包含不可見字元的二進位檔是可以的喔~~

手上沒有好用工具的話,湊和著還是可以用的啦 ^^ 

 

 

(本頁面已被瀏覽過 717 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料