最近在用gdb调试一个程序的时候,由于程序经过了strip处理,没有debug信息,所以当b main的时候会出现”Function main not defined”错误信息,也就是无法定位main函数。而当b libc_start_main函数时是可以定位到的,而libc_start_main函数的第一个参数就是main函数的地址,因此可以通过定位__libc_start_main函数,然后获得第一个参数的内容,此时就是main函数的地址。具体操作如下:
传进__libc_start_main函数的参数
查看汇编可以看到将__libc_start_main的第一个参数传进了$RDI寄存器中(64位机器):
因此在gdb中先在libc_start_main函数下断点: ```b libc_start_main```
在$RDI指向的内容处下断点
在 libc_start_main处下了断点后,run一下会在libc_start_main入口处停下,此时$rdi寄存器存储的是main函数的地址,b *$rdi
则会在main处下断点