You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在OSX上编译ptrace()相关C程序报错,求使用及编译解决方法

在MacOS上使用ptrace()的正确姿势

嘿,我之前在MacOS上折腾ptrace的时候也碰到过不少编译和运行的坑,给你整理一下关键要点,应该能帮你解决问题:

1. 注意MacOS与Linux的ptrace差异

MacOS的ptrace接口和Linux的完全不一样,别直接照搬Linux的代码!

  • 必须包含头文件 <sys/ptrace.h>
  • 命令宏的前缀是PT_而不是Linux的PTRACE_,比如附加进程用PT_ATTACH,而不是PTRACE_ATTACH
  • 参数顺序和返回值处理也有区别

给你一个最简单的attach示例代码:

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

int main(int argc, char *argv[]) {
    if (argc != 2) {
        fprintf(stderr, "Usage: %s <pid>\n", argv[0]);
        return 1;
    }
    pid_t pid = atoi(argv[1]);
    
    // 附加到目标进程
    if (ptrace(PT_ATTACH, pid, NULL, 0) == -1) {
        perror("ptrace attach failed");
        return 1;
    }
    // 等待进程进入停止状态
    waitpid(pid, NULL, 0);
    printf("Attached to pid %d successfully\n", pid);
    
    // 解除附加
    ptrace(PT_DETACH, pid, NULL, 0);
    return 0;
}

2. 解决权限问题(最容易踩的坑)

MacOS的系统完整性保护(SIP)会严格限制ptrace的使用,直接运行编译后的程序大概率会报权限错误,有两种解决方式:

方式一:给程序签名(推荐,不影响系统安全)

创建一个entitlements.plist文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.cs.debugger</key>
    <true/>
</dict>
</plist>

然后用codesign给程序签名:

codesign -s - -f --entitlements entitlements.plist your_program_name

方式二:临时关闭SIP(不推荐,会降低系统安全性)

重启Mac,按住Command+R进入恢复模式,打开终端执行:

csrutil disable

重启后生效,用完记得重新开启:csrutil enable

3. 编译命令

直接用gcc或者cc编译即可,比如:

cc -o ptrace_demo ptrace_demo.c

如果编译时报未定义符号,检查是不是头文件没包含,或者误写了Linux的ptrace宏(比如写成了PTRACE_ATTACH)。

4. 常见报错排查

  • error: use of undeclared identifier 'PT_ATTACH':确认已经包含<sys/ptrace.h>,不要混用Linux的宏定义
  • ptrace attach failed: Operation not permitted:权限问题,按照上面的签名或关闭SIP的方法解决
  • waitpid: No child processes:目标进程不存在,或者你没有权限访问该进程

内容的提问来源于stack exchange,提问作者Alexander Mills

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:42:52