彙編debug程式跳轉指令的方法
問題
一直在用微軟自帶的彙編debug軟體,今天突然有了需要修改ip指令的需求,我以為debug裡面有自帶的修改ip地址的方法,但是查了很多資料,發現並沒有。
思路
後來我研究了一下,其實可以通過朝當前的ip指向的地址內寫入一個jmp到目的地的指令,然後單步執行這個指令,那麼ip就自動跳轉到目的地去了。
方法
1.我朝記憶體中寫入了一段彙編程式碼,比如這樣:
0AE8:0100 mov ax,0
0AE8:0103 mov bx,1
0AE8:0106 add ax,bx
0AE8:0108 add bx,2
0AE8:010B cmp bx,10d
0AE8:010F jl 106
2.現在我的ip指向的並不是0100
這個地址,比如指向的是0112
,按r檢視暫存器當前狀態
-r
AX=0000 BX=0011 CX=0000 DX=0000 SP=FFEC BP=0000 SI=0000 DI=0000
DS=0AE8 ES=0AE8 SS=0AE8 CS=0AE8 IP=0112 NV UP EI PL ZR NA PE NC
0AE8:0112 A2D899 MOV [99D8],AL DS:99D8=00
3.然後朝ip指向的當前地址寫入一段跳轉指令
-a 112
0AE8:0112 jmp 100
0AE8:0114
-r
AX=0000 BX=0011 CX=0000 DX=0000 SP=FFEC BP=0000 SI=0000 DI=0000
DS=0AE8 ES=0AE8 SS=0AE8 CS=0AE8 IP=0112 NV UP EI PL ZR NA PE NC
0AE8:0112 EBEC JMP 0100
-t
AX=0000 BX=0011 CX=0000 DX=0000 SP=FFEC BP=0000 SI=0000 DI=0000
DS=0AE8 ES=0AE8 SS=0AE8 CS=0AE8 IP=0100 NV UP EI PL ZR NA PE NC
0AE8:0100 B80000 MOV AX,0000
可以看到寫入跳轉指令以後,單步執行,ip馬上就跳轉到指定的地址去了,即將執行的正是mov ax,0
這一指令。
總結
其實想了想,上面的步驟並不是很嚴謹,如果你想直接用debug來驗證自己的彙編程式碼,第一步就應該先將ip指向自己想要記憶體區域,第二步才是朝ip指向的記憶體中寫入彙編程式碼,第三步才是進行除錯。
當然如果你說要怎麼修改暫存器的值,還是上面的思路,想好程式碼,寫入記憶體,然後單步執行。
還有,差點忘了一點,也許上面的程式碼還有點問題,我ip所指向的記憶體離我寫入彙編程式碼的地方太近了,也許我調整ip的時候,會覆蓋了我所鍵入的程式碼。因此,最好還是要檢查下程式碼被改了沒,然後再進行執行除錯。
相關文章
- 彙編跳轉指令
- 彙編指令
- 彙編指令速查
- 基本彙編指令
- 手把手教你彙編 Debug
- 彙編學習筆記之轉移指令筆記
- 彙編---移位指令
- 彙編指令(待完善)
- linux彙編指令Linux
- [ARM] ARM彙編指令
- ARM彙編指令集彙總
- javascript控制頁面(含iframe進行頁面跳轉)跳轉、重新整理的方法彙總JavaScript
- 常用的x86彙編指令
- 學 Win32 彙編[28] - 跳轉指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等Win32JS
- 我的彙編學習之路(1):指令
- shellcode轉換成彙編程式碼
- 彙編學習小記(一)-熟悉DEBUG環境
- C語言轉寫成MIPS指令集彙編以及MIPS指令集彙編中函式呼叫時棧的變化C語言函式
- 學習筆記分享之彙編---2.彙編指令/語法筆記
- Win32彙編教程二 Win32彙編程式的結構和語法 (轉)Win32
- 彙編--串傳送指令 MOVS
- 8086彙編指令快速參考
- Linux 的 x86 彙編程式設計(轉)Linux程式設計
- linux下debug與release編譯的方法Linux編譯
- IDEA小技巧:Debug拖動跳轉任意行Idea
- 彙編必知小知識點及常用debug命令
- vue 跳轉的兩種方法Vue
- Ability跳轉指定Slice的方法
- 關於Delphi中預編譯指令的使用方法 (轉)編譯
- 入門龍芯舊世界彙編指令
- 彙編程式碼Helloworld
- js跳轉頁面方法(轉)JS
- 識別和避免反彙編中遇到的花指令
- io記憶體,io埠,彙編 in out 指令記憶體
- 實驗3 轉移指令跳轉原理及其簡單應用程式設計程式設計
- STM彙編程式設計程式設計
- 高階語言反彙編程式的函式呼叫過程 (轉)函式
- BOOT0的主要程式碼兼Unix下彙編小節(轉)boot