在OSX上编译ptrace()程序

时间:2018-02-28 20:47:51

标签: c macos strace ptrace

我在MacOS上有这个简单的C程序:

#include <stdlib.h>
#include <sys/wait.h>
#include <stdio.h>
#include <sys/ptrace.h>


int main(int argc, char *argv[]) {
    pid_t pid = atoi(argv[1]);
    printf("pid = %jd\n", (intmax_t) pid);
    return ptrace(PT_ATTACHEXC, pid, 0, 0);
}

当我使用gcc / cc编译时,我收到此错误:

In file included from my-waiter.c:4:
/usr/include/sys/ptrace.h:99:38: error: unknown type name 'caddr_t'
int     ptrace(int _request, pid_t _pid, caddr_t _addr, int _data);
                                         ^
1 error generated.

有没有人知道如何在OSX上使用ptrace()?我无法弄清楚如何编译它。

2 个答案:

答案 0 :(得分:2)

caddr_t是BSD特定类型,在<sys/types.h标头中定义。它不在POSIX中。

由于您使用的是Mac OS,因此不太相关。但是在使用glibc的现代Linux系统上,在定义_DEFAULT_SOURCE宏时会暴露它。具有较旧glibc(早于glibc 2.20。_BSD_SOURCE的系统已弃用,因为glibc 2.20)需要定义_BSD_SOURCE

答案 1 :(得分:2)

man ptrace给出:

PTRACE(2)                   BSD System Calls Manual                  PTRACE(2)

NAME
     ptrace -- process tracing and debugging

SYNOPSIS
     #include <sys/types.h>
     #include <sys/ptrace.h>

     int
     ptrace(int request, pid_t pid, caddr_t addr, int data);

然后包括<sys/types.h>