gdb中匯編調試


原博客鏈接

第五周學習總結

補充內容

輸入的代碼

使用gcc - g example.c -o example -m32指令在64位的機器上產生32位匯編

刪除gcc產生代碼中以"."開頭的編譯器指令,針對每條指令畫出相應棧幀的情況

使用gdb example指令進入gdb調試器

使用“r”命令執行(Run)被調試文件,因為尚未設置任何斷點,將直接執行到程序結束:

使用“b”命令在 main 函數開頭設置一個斷點(Breakpoint):

上面最后一行提示已經成功設置斷點,並給出了該斷點信息:在源文件 test.c 第13行處設置斷點;這是本程序的第一個斷點(序號為1);斷點處的代碼地址為 0x80483f9(此值可能僅在本次調試過程中有效)。回過頭去看源代碼,第13行中的代碼為“return f(8)+1”,恰好是 main 函數中的第一個可執行語句。

再次使用“r”命令執行(Run)被調試程序:

程序中斷在test.c第13行處,即main函數是第一個可執行語句處。
上面最后一行信息為:下一條將要執行的源代碼為“return f(8)+1;”,它是源代碼文件test.c中的第13行。
下面使用“s”命令(Step)執行下一行代碼(即第13行“return f(8)+1;”):

上面的信息表示已經執行完“return f(8)+1;”,並顯示下一條要執行的代碼為第8行的“return g(x);”。

使用disassemble指令獲取匯編代碼

用i(info) r(registers)指令查看各寄存器的值:

display /i $pc在每次執行下一條匯編語句時,都會顯示出當前執行的語句

call指令將下一條指令的地址入棧

frame 打印出的信息:棧的層編號,當前的函數名,函數參數值,函數所在文件及行號,函數執行到的語句。

info frame 打印出的信息:函數地址,調用函數的地址,被調用函數的地址,目前的函數是由什么樣的程序語言寫成的、函數參數地址及值、局部變量的地址等等。

使用 up down ,跳轉不同堆棧,查詢其中的堆棧簡要信息

剩余內容參考盧肖明同學的博客,內容一樣,就不一一貼圖了,附上盧肖明同學的博客鏈接

GDB調試匯編堆棧過程分析


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM