现在我只想从堆栈中读取返回地址,而不转换为符号名称.
因此,对于测试程序,通过gcc-4.5在-O0模式下编译:
int g() { kill(getpID(),SIgalRM); } int f() { int a; int b; a = g(); b = a; return a+b; } int e() { int c; c = f(); } main() { return e(); }
我将开始我的程序并在一开始就与ptrace连接以测试程序.然后,我将做PTRACE_CONT并等待信号.当测试程序会做自杀时;信号将传递给我的程序.此时我想读取返回地址,它们会像(因为此时kill功能处于活动状态):
0x00_some_address_in_g 0x00_some_address_in_f 0x00_some_address_in_e 0x00_some_address_in_main 0x00_some_address_in__libc_start_main
如何使用ptrace找到当前停止的测试过程的返回地址?框架上会有循环吗?什么时候应该停止这样的循环?
PS:是的,这也非常像backtrace(3)
libc function的想法,但我想通过ptrace在外部做到这一点.
所有上述内容相结合,使“通过帧指针进行堆栈爬行”非常不可靠.
您可以使用@R_421_4035@(它支持local(进程内)和global(进程外通过ptrace)展开).
或者你必须重新实现@R_421_4035@的很大一部分.
Example使用@R_421_4035@通过ptrace获取回溯.
总结以上是内存溢出为你收集整理的如何使用ptrace(linux,x86 / x86_64)获得“回溯”(如gdb)全部内容,希望文章能够帮你解决如何使用ptrace(linux,x86 / x86_64)获得“回溯”(如gdb)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)