【发布时间】:2016-10-05 13:34:34
【问题描述】:
我的代码如下:
#include <sys/ptrace.h>
#include <stdio.h>
int
main()
{
printf("PTRACE_CONT: %d\n", PTRACE_CONT);
printf("PTRACE_SYSCALL: %d\n", PTRACE_SYSCALL);
printf("PTRACE_SINGLESTEP: %d\n", PTRACE_SINGLESTEP);
printf("PTRACE_SYSEMU: %d\n", PTRACE_SYSEMU);
printf("PTRACE_SYSEMU_SINGLESTEP: %d\n", PTRACE_SYSEMU_SINGLESTEP);
printf("PTRACE_LISTEN: %d\n", PTRACE_LISTEN);
return 0;
}
我在 Ubuntu16.04 (Linux x86_64 4.40-38) 上使用 gcc v5.4.0 上的默认标志进行编译。
这会引发 PTRACE_SYSEMU 未声明的错误。而man ptrace 页面states it exists。如果包含 PTRACE_SYSEMU 的行被注释掉,则对 PTRACE_SYSEMU_SINGLESTEP 重复此操作。手册页指出 PTRACE_SYSEMU_SINGLESTEP 仅适用于 x86,except a patch was merged to unify the x86 and x64 在 2008 年处理 PTRACE_SYSEMU_SINGLESTEP。
这会在 32 位(以及 i686)或 64 位(AMD64)上产生相同的错误。这个发行版是特定的吗?到底是怎么回事?
我可以确认我的/usr/include/x86_64/linux/sys/ptrace.h 中没有定义这些值。但是它们是在内核源代码中定义的?!?
【问题讨论】: