資訊安全:組合語言 Debug 工具簡介

若您覺得文章寫得不錯,請點選網誌上的廣告,來支持小編,謝謝。

此文章的測試環境為 Virtualbox 虛擬機上的 Windows XP Pro版本。此篇文章是以 MS Dos 的 Debug 工具來撰寫組合語言。

MS DOS Debug 軟體介紹
MS DOS 下的 DEBUG 為可以檢視記憶體內容、直接存取記憶體內容、撰寫簡易組合語言程式以及程式除錯等功能的工具程式。執行方式為【開啟命令提示字元(Command Prompt)

接著鍵入【Debug】,就會進入到 Debug 程式裡。

而Debug 的指令說明如下:
C:\DOCUME~1\admin>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

那先來寫個 Hello World 範例(此範例來自於:Old school assembly "Hello World!": Method 2)
-a 100
08FA:0100 jmp 111
08FA:0102
-e 102 'Hello World!',0D,0A,'$'
-a 111
08FA:0111 mov dx,102
08FA:0114 mov ah, 09
08FA:0116 int 21
08FA:0118 int 20
08FA:011A
-h 011a 0100
021A 001A
-n hello.com
-rcx
CX 0000 :001a
-w
Writing 001A bytes
-q
使用 Debug 撰寫程式碼:

執行結果:

以上為用 Debug 程式輸出 "Hello World" 字串。

接著做簡易加法的範例(此範例來自於:https://www.codeproject.com/Articles/37762/How-To-Use-Debug):
-a «                 ; start to write code
mov ax,03 «      ; pass AX 03, AX will be 03
mov bx,04 «      ; pass BX 03, AX will be 04
add ax,bx «       ; add AX with BX, the sum is in AX
int 3 «              ; break
使用 Debug 撰寫程式碼:

執行結果:



現在讀者可以使用 x86 assembly language(x86 組合語言)來實作看看,可參考此影片
x86 Assembly: Hello World!。當然可以用線上的 IDE:https://www.tutorialspoint.com/compile_assembly_online.php

簡短回顧如何使用 MS- Dos Debug 撰寫組合語言的程式:
  1. 開啟 MS-DOS Prompt
  2. 啟動 Debug 程式
  3. a(ssemble) 指令與 g(o)指令
範例:

MS-DOS Debug 是 16-bit/32-bit 時代的軟體,若要學組合語言,筆者建議學習 NASM