Skip to content

Conversation

@oeasy1412
Copy link
Member

feat(ptrace): 初步实现ptrace系统调用并完善信号处理机制

概述

本PR实现了Linux兼容的ptrace系统调用,包括进程跟踪、信号拦截、系统调用监控等核心功能。实现严格遵循Linux 6.6.21源码语义,为DragonOS提供初步的调试器支持(如gdb、strace)的能力。

主要功能

1. PTRACE_TRACEME 完整实现

  • 子进程主动声明自己被父进程跟踪
  • 实现信号拦截机制,子进程接收到信号时通知父进程

2. PTRACE_ATTACH / PTRACE_DETACH 完整实现

  • 支持跟踪器附加到任意进程
  • 支持分离跟踪,恢复目标进程正常运行
  • 正确处理SIGSTOP信号的发送与恢复

3. PTRACE_SYSCALL 部分实现

  • 系统调用入口/出口拦截
  • 跟踪进程的系统调用执行
  • 配合PTRACE_SETOPTIONS实现syscall追踪模式

4. PTRACE_PEEKDATA / PTRACE_POKEDATA 部分实现

  • 读取/写入被跟踪进程的内存
  • 安全的跨进程内存访问

5. PTRACE_GETREGS 部分实现

  • 获取被跟踪进程的寄存器状态
  • 返回Linux兼容的user_regs_struct结构

核心实现

新增文件

  • kernel/src/process/ptrace.rs - ptrace核心逻辑

    • ptrace_stop: 进程停止与唤醒机制
    • ptrace_signal: 信号拦截与注入
    • ptrace_notify: 通知追踪者事件发生
  • kernel/src/process/syscall/sys_ptrace.rs - ptrace系统调用入口

    • 请求分发与参数验证
    • 权限检查(CAP_SYS_PTRACE)
  • user/apps/c_unitest/test_ptrace.c - ptrace功能测试用例

修改文件

  • kernel/src/process/mod.rs - 添加ptrace相关进程状态管理
  • kernel/src/process/exit.rs - 处理被跟踪进程的退出通知
  • kernel/src/arch/x86_64/syscall/mod.rs - 系统调用拦截支持
  • kernel/src/ipc/signal.rs - 信号处理与ptrace集成
  • kernel/src/ipc/signal_types.rs - 添加ptrace相关的siginfo类型定义

测试验证

测试用例输出(与Linux 6.6.21行为一致)

=== Testing PTRACE_TRACEME ===
Child ready for tracing
Child stopped by signal 19 (Stopped (signal))
Child exited with status 0

=== Testing PTRACE_ATTACH/DETACH ===
target process 100 waiting...
Tracer attaching to target 100
target stopped by signal 19 (Stopped (signal))
Tracer detaching from target
target received 18 (Continued)
target exited with status 0

# TODO 
=== Testing PTRACE_SYSCALL ===

=== Testing PTRACE_PEEKDATA ===

后续工作

  • PTRACE_SINGLESTEP 单步执行支持
  • PTRACE_CONT 恢复执行支持
  • 更多PTRACE_SETOPTIONS选项支持
  • PTRACE_GETREGSET/SETREGSET 支持

strace & RawPid

Signed-off-by: aLinChe <1129332011@qq.com>
Signed-off-by: aLinChe <1129332011@qq.com>
Signed-off-by: aLinChe <1129332011@qq.com>
Signed-off-by: aLinChe <1129332011@qq.com>
Signed-off-by: aLinChe <1129332011@qq.com>
Signed-off-by: aLinChe <1129332011@qq.com>
Signed-off-by: aLinChe <1129332011@qq.com>
Signed-off-by: aLinChe <1129332011@qq.com>
主要改进:
- 重构信号权限检查,统一使用check_kill_permission函数
- 修复wait系统调用对ptrace子进程的支持,包括TracedStopped状态处理
- 完善ptrace_signal函数,修复潜在的use-after-free问题
- 改进exit_signal时序,确保waitid后进程资源立即释放
- 修复ProcessState::Stopped状态存储实际停止信号号
- 增强错误处理,避免panic风险
Signed-off-by: aLinChe <1129332011@qq.com>
Signed-off-by: aLinChe <1129332011@qq.com>
@github-actions github-actions bot added the enhancement New feature or request label Jan 14, 2026
@sparkzky
Copy link
Collaborator

2 months ago...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants