Debug的基本使用()
Debug是一個(gè)通過操作系統(tǒng)(os)對(duì)cpu寄存器進(jìn)行訪問用于學(xué)習(xí)匯編的程序,但是如今的win10(64位)已經(jīng)不支持cmd打開debug,但是我們可以通過DOSBOX模擬器對(duì)其進(jìn)行訪問。
安裝方法:先在https://www.dosbox.com中下載dosbox(默認(rèn)路徑在C:\Program Files (x86)),接下來在網(wǎng)上下載debug.exe,為了方便可以直接在D盤下創(chuàng)一個(gè)Debug文件夾放到里邊即可。接下來修改一下DOSBox 0.74-3 Options.bat里的路徑,把最后的路徑掛到
MOUNT C D:\DebugC:debug
中即可打開Dosbox。
debug 的基本用法
debug 基本指令 | 指令全稱 | 用法 | 用途 |
---|---|---|---|
? | ---------- | ? | 顯示debug的命令列表 |
A | assemble | A [ address ] | 將輸入源程序的指令匯編成目標(biāo)代碼并從指定的地址單元開始存放。若省缺起始地址,則從當(dāng)前CS:100地址開始存放。A命令按行匯編,主要用于小段程序的匯編或?qū)δ繕?biāo)程序的修改 |
C | compare | C range address | 比較內(nèi)存的兩個(gè)部分 |
D | dump | D [ range ] | 顯示部分內(nèi)存的內(nèi)容 |
E | enter | E address [ list ] | 從指定地址開始,將數(shù)據(jù)輸入 |
F | fill | F range list | 使用指定值填充一段內(nèi)存 |
G | go | G [ = address ] [ addresses ] | 運(yùn)行在內(nèi)存中的可執(zhí)行文件 |
H | hex | H value1 value2 | 執(zhí)行十六進(jìn)制運(yùn)算 |
I | input | I port | 顯示來自特定端口的 1 字節(jié)值 |
L | load | L [ address ] [driver ] [ firstsector ] [ number ] | 將文件或磁盤扇區(qū)內(nèi)容加載到內(nèi)存 |
M | move | M range address | 復(fù)制內(nèi)存塊中的內(nèi)容 |
N | name | N [ pathname ] [ arglist ] | 指定 Debug l(加載)或 w(寫入)命令的可執(zhí)行文件的名稱,或者指定正在調(diào)試的可執(zhí)行文件的參數(shù) |
O | output | O port byte | 向輸出端口發(fā)送 1 個(gè)字節(jié)的值 |
P | proceed | P [ =address ] [ number ] | 執(zhí)行循環(huán)、重復(fù)的字符串指令、軟件中斷或子例程;或通過任何其他指令跟蹤 |
Q | quit | Q | 退出 debug會(huì)話,不保存當(dāng)前測(cè)試文件 |
R | register | R [ register ] | 若給出寄存器名,則顯示該寄存器的內(nèi)存并可進(jìn)行修改。缺省寄存器名,則顯示所有寄存器的內(nèi)容及當(dāng)前值( 不能修改 ) |
S | search | S range list | 在部分內(nèi)存中搜索一個(gè)或多個(gè)字節(jié)值的模式 |
T | trace | T [ =address] [ value ] | 執(zhí)行一條指令,然后顯示所有寄存器的內(nèi)容、所有標(biāo)志的狀態(tài)和Debug下一步要執(zhí)行的指令的解碼形式 |
U | unassemble | U [ range ] | 反匯編字節(jié)并顯示相應(yīng)的原語句 |
W | write | W [address ] [ drive ] [ firstsector ] [ number ] | 將測(cè)試文件寫入磁盤 |
XA | allocate expanded memory | XA [ # pages ] | 分配擴(kuò)展內(nèi)存 |
XD | deallocate expanded memory | XD [ handle ] | 釋放擴(kuò)展內(nèi)存 |
XM | map expanded memory pages | XM [ Lpage ] [ Ppage ] [ handle ] | 映射擴(kuò)展內(nèi)存頁(yè) |
XS | display expanded memory status | XS | 顯示擴(kuò)展內(nèi)存的狀態(tài) |
以上便是debug的簡(jiǎn)介。
學(xué)習(xí)匯編語言并且調(diào)用debug調(diào)試的時(shí)候,主要使用到 -L -U -D -G -T -P 指令
-L 裝入 -G 運(yùn)行 -U 反匯編 -T 單步(可以進(jìn)入子程序) -P 單步(不進(jìn)入子程序)-D 查詢內(nèi)存
匯編語言程序建立步驟:
- edit 建立源文件 格式:edit xxx.asm ( 必須以 asm 為擴(kuò)展文件名,否則不能使用 masm 調(diào)用 ),生成 obj 文件。
- masm 生成鏈接文件 格式:masm xxx.asm 然后生成 obj 文件,obj 文件是可連接文件,接下來需要使用link鏈接文件生成exe
- link 生成 exe 文件 格式:link xxx.obj 生成 exe 可執(zhí)行文件
接下來我們進(jìn)行一些基本的操作
-r 命令查看,改變cpu寄存器內(nèi)容
-d 查看內(nèi)存中的內(nèi)容
-e 命令改寫內(nèi)存中的內(nèi)容
-u 將機(jī)器指令翻譯為匯編指令
-t 執(zhí)行下一條指令
-a 以匯編指令方式寫入一條機(jī)器指令
首先介紹一下基本內(nèi)容,看下初始配置:
看這些寄存器的名稱應(yīng)該都是8086的寄存器名稱2333
在電腦(CISC)的cpu指令由pc(cs段地址和ip偏移地址往地址總線傳輸?shù)刂罚┛刂?,因此我們可以修改cs和ip值對(duì)pc進(jìn)行操作。
CS:代碼段寄存器i ES:額外的寄存器
DS:數(shù)據(jù)段寄存器 (A-D)X:普通寄存器
SS:堆棧段寄存器 SP:堆棧寄存器
BP:基址寄存器 DI:變址寄存器
SI:源址寄存器
修改cs,ip地址(-r cs||ip),dosbox里默認(rèn)是2個(gè)字節(jié)16位,即4個(gè)十六進(jìn)制表示:
執(zhí)行下一條指令(-t),可發(fā)現(xiàn)ip+=3,占了三個(gè)字節(jié),在-d查看一下內(nèi)存:
下面我們隨意用-a來操作一下(輸入命令):
然后修改cs:ip往下執(zhí)行......:
按quit即可退出,以上就是debug的基本匯編操作用法,觀看愉快?。?!
相關(guān)文章
匯編用串檢測(cè)scasb尋找數(shù)的位置實(shí)現(xiàn)
這篇文章主要介紹了匯編用串檢測(cè)scasb尋找數(shù)的位置實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02使用匯編語言編寫一條簡(jiǎn)單的貪吃蛇的實(shí)現(xiàn)
這篇文章主要介紹了使用匯編語言編寫一條簡(jiǎn)單的貪吃蛇的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01匯編語言進(jìn)制轉(zhuǎn)換之16進(jìn)制轉(zhuǎn)10進(jìn)制
這篇文章主要介紹了匯編語言進(jìn)制轉(zhuǎn)換之16進(jìn)制轉(zhuǎn)10進(jìn)制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07匯編語言XOR指令:對(duì)兩個(gè)操作數(shù)進(jìn)行邏輯(按位)異或操作(推薦)
匯編語言(assembly language)是一種用于電子計(jì)算機(jī)、微處理器、微控制器或其他可編程器件的低級(jí)語言,亦稱為符號(hào)語言。這篇文章主要介紹了匯編語言XOR指令:對(duì)兩個(gè)操作數(shù)進(jìn)行邏輯(按位)異或操作,需要的朋友可以參考下2020-01-01