c - 在 GDB 中回溯期间显示的地址是什么?
问题描述
我是 GDB 的新手。我想知道每一帧开头的地址 0xXXXX 到底是什么意思?
(gdb) bt
#0 g2 (a=4, b=34) at 2.7.c:10
#1 0x0000000008000703 in main (argc=1, argv=0x7ffffffedd48) at 2.7.c:18
这是返回位置的地址还是函数开始的地址?这是代码的适用部分。 在此处输入图像描述
int g2(int a, int b){
int c = g1(a+3, b-11);
printf("g2: a = %d, b = %d, c = %d\n", a, b, c);
return c;
}
int main(int argc, char **argv){
int a = 5;
int b = 17;
int c = g2(a-1, b*2);
printf("g3: a = %d, b = %d, c = %d\n", a, b, c);
return 0;
}
解决方案
当被调用的代码返回到这个帧时,返回的就是函数内部的返回地址。如果您将代码反汇编为 main ( disas main
),您将看到带有地址的 main 代码,其中一个地址将是有问题的地址 (0x8000703),它可能是紧跟在指令之后的call
指令。
推荐阅读
- ruby - 如何确定已安装的 ruby 版本?
- python - 每次我这样做时,如何使用 Selenium 从 instagram 获取帖子 url,每次我向下滚动时它都会动态变化?
- python - 如何检查鼠标和矩形对象之间的碰撞
- php - PHP 数组转换为单个 php 字符串,来自 SQL 数据
- linux - 如何使用 FFMPEG 从 Apple PRORES Quicktime 转码 h264_qsv?
- c++ - Qt C++:无法为不同线程中的父级创建子级
- json - Vue 在 v-for 中显示数组的两个对象
- linux - ssh 以 sudo 运行时不执行远程命令
- elasticsearch - Elasticsearch 将节点添加到集群
- linux - 仅当所有文件中都存在字符串时,如何在多个文件上 grep 字符串?