64位机 ptrace问题

今天看书看到ptrace这个函数。有人说功能强大,是strace等跟踪工具和gdb调试器的基石。我按网上的资料写个测试程序,发现点问题。

syscallID = ptrace(PTRACE_PEEKUSER, pid, ORIG_EAX*4, NULL);

这是网上某人写的代码。我把它放到64位linux上编译,发现编译不过,说找不到ORIG_EAX。我明明#include <sys/reg.h>了,怎么回事,我打开reg.h一看,原来里面用了#if WORDSIZE==64  #define ORIG_RAX 15。32位上是ORIG_EAX, 64位上应该用ORIG_RAX。改过来后,编译能过。但运行后,syscallID = -1, 即ptrace返回出错。于是我改成

syscallID = ptrace(PTRACE_PEEKUSER, pid, ORIG_RAX*8, NULL);

再一次运行,ptrace没有返回错误。但是返回的system call ID 不对。比如execv应该返回11, 而上面这句返回59。其它好多返回的system call ID都不对。google了很长时间,没找到相关信息,只是发现一个英文网页http://t977.codeinpro.us/q/508128f74f1eba38a41c015e,这个哥们和我遇到同样问题,但好像没人说清为什么。这可能要看下ptrace的文档和代码,才能搞清楚到底怎么回事。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值