我正在尝试学习如何使用 rbp/ebp 访问 ubuntu1604、64bit 上的函数参数和局部变量。我有一个简单的 c 文件:
#include<stdio.h>
int main(int argc,char*argv[])
{
printf("hello\n");
return argc;
}
我编译它:
gcc -g my.c
然后使用参数参数对其进行调试:
gdb --args 我的 01 02
在这里我知道“argc”应该是 3,所以我尝试检查:
(gdb) b main
Breakpoint 1 at 0x400535: file ret.c, line 5.
(gdb) r
Starting program: /home/a/cpp/my 01 02
Breakpoint 1, main (argc=3, argv=0x7fffffffde98) at ret.c:5
5 printf("hello\n");
(gdb) x $rbp+4
0x7fffffffddb4: 0x00000000
(gdb) x $rbp+8
0x7fffffffddb8: 0xf7a2e830
(gdb) x/1xw $rbp+8
0x7fffffffddb8: 0xf7a2e830
(gdb) x/1xw $rbp+4
0x7fffffffddb4: 0x00000000
(gdb) x/1xw $rbp
0x7fffffffddb0: 0x00400550
我没有发现任何线索表明“3”的双字保存在 $rbp+xBytes 的任何字节中。我的理解或命令有什么问题吗?
谢谢!