首页 > 解决方案 > 关于信号处理程序中的非信号安全系统调用

问题描述

我正在尝试使用 ptrace 在 linux 中实现 CreateRemoteThread。主要问题是 mmap 和 clone 系统调用不是信号安全的,因此直接注入它们是危险的。

但是,如果我可以确保内核中没有该进程的待处理 mmap 和克隆系统调用呢?

例如,首先我附加目标进程的所有线程并检查 rip 的前 2 个字节是否为 0x0f 0x05(syscall)。如果是,则从 orig_rax reg 获取系统调用号并检查它是 9(mmap) 还是 56(clone)。如果是这样,我将 rip 中的地址设置为 0xcc(int3) 并继续该线程。当我从这些线程收到 SIGTRAP 时,应该完成这些系统调用,并且该进程中不应该有未挂起的 mmap 和克隆系统调用。

现在使用 mmap 和 clone 系统调用是否安全?

标签: linuxassemblysignalsx86-64ptrace

解决方案


推荐阅读