日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

每天学点GDB 5

發布時間:2024/4/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 每天学点GDB 5 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GDB提供了強大的反匯編能力,本節就圍繞于該主題而展開。

繼續以Hello.c為例。

#include <stdlib.h> #include <stdio.h>int main(int argc, char** argv) {printf("hello,world\n");return 0; }

編譯生成可執行文件

gcc -o hello -g hello.c

用gdb載入進行調試

gdb hello

反匯編main函數

disassemble main

 以下為輸出內容

Dump of assembler code for function main:0x080483fc <+0>: push %ebp0x080483fd <+1>: mov %esp,%ebp0x080483ff <+3>: and $0xfffffff0,%esp0x08048402 <+6>: sub $0x10,%esp0x08048405 <+9>: movl $0x80484b0,(%esp)0x0804840c <+16>: call 0x80482d0 <puts@plt>0x08048411 <+21>: mov $0x0,%eax0x08048416 <+26>: leave0x08048417 <+27>: ret End of assembler dump.

如果留心的話,可能發現在main函數中調用的printf并沒有在反匯編中出現。原因在于printf其實使用的是puts。

如果已經知道了地址,想反過來查看是否對應為某一個函數的話,可以使用info symbol指令

info symbol 0x80482d0

輸出為

puts@plt in section .plt

說明地址0x80482d0對應于函數puts

與info symbol相對的指令為info address,可以通過名稱獲得其地址。繼續為Puts為例

info addr puts

輸出為

Symbol "puts" is at 0x80482d0 in a file compiled without debugging.

反匯編的另外一種方法就是使用x,當程序執行后(注意一定是程序運行后,停在斷點處時),可以使用如下指令

x/3i $pc

?

?

總結

以上是生活随笔為你收集整理的每天学点GDB 5的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。