中秋月圓人團圓 烤肉越吃臉越圓
中秋節快樂 / 我想吃烤肉
前一章提到了環境的安裝或自行編譯與設定gdb
但如果不知道調試技巧 後續遇到問題也只剩愣在電腦前面
於是
今天就來談談我自己常用的gdb指令
當然 gdb 內有help指令告訴你有哪些可用的指令
file xxx.elf
target remote [target]:[port]
這時我們就可以知道我們接上target的程序了
layout asm
這時我們就知道這幾行的指令是什麼
xzr為zero register, 特殊寄存器的一種, 目的也是為了清空資料
經過閱讀過後就可以知道x1,x2,x3的寄存器都被清空後, 把0x20的資料載進x4裡面, 接著進行跳轉
當然在這裡如果已經開始困惑, 可以先嘗試閱讀arm的官方文件, 內部都有表明不同的架構底下有哪些寄存器.
layout src
這邊就可以看到目前正進入一個while loop, 並且嘗試抓取一個char
si # 單步執行(會進入function)
ni # 單步執行(直接執行完function跳出)
c # continue, 如果設定好中斷點 直接c下去可以直接撞到你要的點
x/10i $address # 查看 address 的位置往下10個instruction. (此指令有非常多用法, 族繁不及備載)
fin # 直接跳開目前的function回到上一層
那gdb真的非常好用, 網上還有很多大神釋出的加強套件, 可以斟酌使用.
如果習慣視窗化的像是x64-debugger可能就要稍微熟悉指令的部分
[參考連結]
https://www.cs.cmu.edu/~gilpin/tutorial/