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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

gdb info frame信息解释

發布時間:2024/10/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gdb info frame信息解释 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include <stdio.h>void show3() {puts("show3"); }void show2() {puts("show2");show3(); }void show1() {puts("show1");show2(); }int main() {show1();return 0; }

執行如下指令:

$gcc -o test.o test.cc -g$gdb test.o -q (gdb) b 4 (gdb) r Starting program: /home/xcl/Doc/test/test.o show1 show2Breakpoint 1, show3 () at test.cc:5 5 puts("show3"); (gdb) backtrace #0 show3 () at test.cc:5 #1 0x0000555555554662 in show2 () at test.cc:11 #2 0x000055555555467a in show1 () at test.cc:17 #3 0x0000555555554686 in main () at test.cc:22 (gdb) info frameStack level 0, frame at 0x7fffffffdac0:rip = 0x55555555463e in show3 (test.cc:5); saved rip = 0x555555554662called by frame at 0x7fffffffdad0source language c++.Arglist at 0x7fffffffdab0, args: Locals at 0x7fffffffdab0, Previous frame's sp is 0x7fffffffdac0Saved registers:rbp at 0x7fffffffdab0, rip at 0x7fffffffdab8

進入正題!

Stack level 0, frame at 0x7fffffffdac0:

含義:當前棧的起始地址 0x7fffffffdac0 。

rip = 0x55555555463e in show3 (test.cc:5); saved rip = 0x555555554662

含義:

  • 0x55555555463e 表示當前的 rip 寄存器的值(test.cc:5)。
  • 0x555555554662:表示調用本函數(當前調用函數為 show3)的指令的地址,即:0x555555554662 應該表示的是源程序第 11 行翻譯成匯編后的地址。

called by frame at 0x7fffffffdad0

含義:這個表示上一個棧幀的地址,因為當前函數是 show3,所以這個地址表示 show2 的棧的地址,可以用命令查看一下 show2 的棧地址。

source language c++.

含義:源程序是 c++ 語言。

Arglist at 0x7fffffffdab0, args:

含義:存放函數參數的地址從 0x7fffffffdab0 開始。

Locals at 0x7fffffffdab0, Previous frame's sp is 0x7fffffffdac0

含義:存放函數局部變量的地址從 0x7fffffffdab0 開始。

Saved registers:

rbp at 0x7fffffffdab0, rip at 0x7fffffffdab8

含義:調用函數的過程中,壓棧時保存的相關寄存器的值。

其他

查看上一個棧幀的信息。

(gdb) backtrace
#0? show3 () at test.cc:5
#1? 0x0000555555554662 in show2 () at test.cc:11
#2? 0x000055555555467a in show1 () at test.cc:17
#3? 0x0000555555554686 in main () at test.cc:22
(gdb) select-frame 1
(gdb) info frame
??? Stack level 1, frame at 0x7fffffffdad0:
??? rip = 0x555555554662 in show2 (test.cc:11); saved rip = 0x55555555467a
??? called by frame at 0x7fffffffdae0, caller of frame at 0x7fffffffdac0
??? source language c++.
??? Arglist at 0x7fffffffdac0, args:
??? Locals at 0x7fffffffdac0, Previous frame's sp is 0x7fffffffdad0
??? Saved registers:
??? rbp at 0x7fffffffdac0, rip at 0x7fffffffdac8?

?可以發現,兩個藍色部分的地址是一樣的。

?

參考:https://blog.csdn.net/xiayu0912/article/details/6311394

?

(SAW:Game Over!)

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的gdb info frame信息解释的全部內容,希望文章能夠幫你解決所遇到的問題。

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