关于64位CentOS上ptrace报<linux/user.h> no such file 错误的解决方法

首先介绍一下ptrace:

ptrace提供了一种使父进程得以监视和控制其它进程的方式,它还能够改变子进程中的寄存器和内核映像,因而可以实现断点调试和系统调用的跟踪。
使用ptrace,你可以在用户层拦截和修改系统调用(sys call)

我们以一个实例为例:

[cpp]  view plain  copy
 print ?
  1. #include <sys/ptrace.h>  
  2. #include <sys/types.h>  
  3. #include <sys/wait.h>  
  4. #include <unistd.h>  
  5.   #include <linux/user.h> /* For constants  
  6.                                     ORIG_EAX etc */  
  7. int main()  
  8.   {  
  9.     pid_t child;  
  10.      long orig_eax;  
  11.      child = fork();  
  12.       if(child == 0) {  
  13.          ptrace(PTRACE_TRACEME, 0, NULL, NULL);  
  14.          execl("/bin/ls""ls", NULL);  
  15.      }  
  16.       else {  
  17.          wait(NULL);  
  18.          orig_eax = ptrace(PTRACE_PEEKUSER,  
  19.                            child, 4 * ORIG_EAX,  
  20.                            NULL);  
  21.          printf("The child made a "  
  22.                 "system call %ld ", orig_eax);  
  23.          ptrace(PTRACE_CONT, child, NULL, NULL);  
  24.      }  
  25.      return 0;  
  26. }  



运行gcc -o xxxx xxxx.c 之后报<linux/user.h> no such file...这个错误提示。
错误形成的原因是因为内核结构的变化使得原先/usr/include/linux/user.h消失而是变为了/usr/include/sys/reg.h
因此,调试的时候需要将  #include linux/user.h> 这句变为 #include <sys/reg.h>
当然修改之后还是会报错,原因是因为64位的寄存器结构和32位不同,解决方法是将 ORIG_EAX改为ORIG_RAX 便可以运行成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值