我们要调试的程序是
#include<stdio.h>
int main(){
int *p = NULL;
printf("%p\n",p);
*p = 3;
printf("%d\n",*p);
return 0;
}
可以看到第6行会访问非法内存地址,segment fault。
#命令
gcc main.c -o prog && ./prog
#输出
(nil)
Segmentation fault (core dumped)
使用gdb运行此二进制文件,r 命令以后会给出报错地址
使用objdump -d 反汇编此二进制文件,命令 objdump -d prog > prog.binary,查看prog.binary,并搜索这个地址。报错就是在这一句代码。这份汇编代码符合C源码,%rax应该就是p指向的地址了。