ret指令用棧中的資料,修改ip的值,從而實現近轉移。
cpu執行ret指令時,進行下面兩步操作:
(ip)=((ss)*16+(sp))
(sp)=(sp)+2;
另一種用法 ret n (n為整數)
等效於(ip)=((ss)*16+(sp))
(sp)=(sp)+2;
(sp)=(sp)+n;
例如ret 4
pop ip
add sp,4
例:push eax
call @msg ;call標號是把eip壓入堆疊,然後再跳到標號@msg處
;[標記1]
;繼續**....
@msg:
push 0
push 0
push eax
push 0
call dword ptr [messageboxa]
ret ;這是取出eip,返回到呼叫處,繼續執行[標記1]
1.恢復ip(instruction pointer):(ip)←((sp)+1:(sp)),(sp)←(sp)+2
2.恢復cs(code segment):(cs)←((sp)+1:(sp)),(sp)←(sp)+2
3.恢復中斷前的psw(program status word),即恢復中斷前的標誌暫存器的狀態。
(fr)←((sp)+1:(sp)),(sp)←(sp)+2
4.恢復esp(返回許可權發生變化)
5.恢復ss(返回許可權發生變化)
int 指令
1) 中斷型別號
2) 標誌暫存器入棧,if=0.tf=1
3) cs ,ip入棧
4) ip=(n*4),cs=(n*4+2)
awatch
指定乙個變數,如果這個變數被讀或者被寫,則暫停程式執行,在偵錯程式中顯示資訊,並等待下乙個除錯命令。參考rwatch和watch命令。
backtrace
顯示函式呼叫得所有棧框架(stack frames)的蹤跡和當前函式的引數的值,bt是這個命令的簡寫。
break
設定乙個斷點,這個命令需要指定**行或者函式名作為引數
clear
刪除乙個斷點,這個命令需要制定**行或者函式名作為引數
continue
偵錯程式停止的地方繼續執行
ctrl-c
在當前位置停止執行正在執行的程式,斷點在當前行
disable
禁止斷點功能,這個命令需要禁止的斷點在斷點列表索引值作為引數
display
在斷點的停止的地方,顯示指定的表示式的值。(顯示變數)
enable
允許斷點功能,這個命令需要允許的斷點在斷點列表索引值作為引數
finish
繼續執行,知道當前函式返回
ignore
忽略某個斷點制定的次數。例:ignore 4 23忽略斷點4的23次執行,在第24次的時候中斷
info breakpoints
檢視斷點資訊
info display
檢視設定的需要顯示的表示式的資訊
kill
終止當前debug的程序
list
顯示10行**。如果沒有提供引數給這個命令,則從當前行開始顯示10行**。如果提供了函式名作為引數,則從函式開頭顯示。如果提供**行的編號作為引數,這一行作為開頭顯示。
load
動態載入乙個可執行檔案到偵錯程式。
next
執行下一行的源**的所有指令。如果是函式呼叫,則也當作一行源**,執行到此函式返回
nexti
執行下一行的源**中的一條彙編指令
顯示變數的值
ptype
顯示變數的型別
return
強制從當前函式返回
run從程式開始的地方執行
rwatch
指定乙個變數,如果這個變數被讀,則暫停程式執行,在偵錯程式中顯示資訊,並等待下乙個除錯命令。參考rwatch和watch命令。
set設定變數的值。例如:set nval=54將把54儲存到nval變數中
step
繼續執行程式下一行源**的所有指令。如果是呼叫函式,這個命令將進入函式的內部,單步執行函式中**。
stepi
繼續執行程式下一行源**中的彙編指令。如果是函式呼叫,這個命令將進入函式的內部,單步執行函式中的彙編**。
txbreak
在當前函式的退出的點上設定乙個臨時的斷點(只可使用一次)。
undisplay
刪除乙個display設定的變數顯示。這個命令需要將display list中的索引做引數。
watch
指定乙個變數,如果這個變數被寫,則暫停程式執行,在偵錯程式中顯示資訊,並等待下乙個除錯命令。參考rwatch和watch命令。
whatis
顯示變數的值和型別。
xbreak
在當前函式的退出的點上設定乙個斷點。
幾個常用(偽)彙編指令詳解
sdram例程 從nand flash啟動cpu時,cpu會自動將nand flash開始的4k資料複製到4kb的內部ram中 起始位址0 然後位址0開始執行。本例程先用彙編設定好sdram,將程式從內部ram複製到sdram,然後跳轉到sdram執行。源 包括sdram.s gpio.c s3c2...
mo彙編指令 彙編指令大全
一 資料傳輸指令 它們在存貯器和暫存器 暫存器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把ax,cx,dx,bx,sp,bp,si,di依次壓...
彙編 彙編指令大全
一 資料傳輸指令 它們在存貯器和暫存器 暫存器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把ax,cx,dx,bx,sp,bp,si,di依次壓...