40得票1回答
Linux 中的 ptrace 是如何工作的?

ptrace系统调用允许父进程检查所附加的子进程。例如,在Linux中,strace(使用ptrace系统调用实现)可以检查子进程调用的系统调用。 当所附加的子进程调用系统调用时,ptracing父进程可以被通知。但是这个通知机制是如何实现的呢?我想了解这种机制背后的技术细节。 提前致谢。

25得票8回答
在OS X中读取其他进程的内存?

我一直在尝试理解如何在Mac OS X上读取其他进程的内存,但是我没有太多的运气。我在网上看到很多示例使用ptrace和PEEKDATA等选项,但是在BSD上没有这个选项 [man ptrace]。int pid = fork(); if (pid > 0) { // mess...

16得票1回答
如何使用ptrace来沙盒运行Rails中不受信任的代码?

假设我有这个糟糕的控制器代码:class MovesController < ApplicationController def create eval(params[:input]) end end 我一直在寻找一种最佳方法来对不受信任的代码进行沙箱运行,最近在 rub...

16得票1回答
ptrace和线程

我正在开发一个 Linux 应用程序,利用 ptrace 观察另一个进程的线程。当我观察的应用程序派生出子进程时,这已经可以很好地工作了。通过在我的应用程序中调用 waitpid,我可以获取观察应用程序中的以下信号: SIGSTOP 来自子进程 SIGTRAP 来自父进程 为了跟踪所有子进...

15得票4回答
如何使用PTRACE获得多个线程的一致视图?

在我处理这个问题时,我想到了一个可能利用ptrace的方法,但是我不理解ptrace和线程是如何进行交互的。 假设我有一个给定的多线程主进程,并且我想要附加到其中的特定线程(可能是从派生的子进程中)。 我能够附加到特定的线程吗? (手册对此问题存在分歧。) 如果可以,那么单步执行是否只...

14得票2回答
PTrace:linux/user.h:找不到文件或目录

我正在使用 Ubuntu 12.04 操作系统,在一台32位的Intel机器上安装了linux-headers-3.2.0-60。我尝试编译这个简单的程序来理解PTrace,但在编译过程中出现错误。#include <sys/ptrace.h> #include <sys/t...

13得票1回答
从一个线程中追踪另一个线程

我正在尝试使用系统调用ptrace()来实验,想要追踪同一进程中的另一个线程。根据 man 手册的说明,追踪器和被追踪者都是特定的线程(不是进程),所以我不明白为什么它不能工作。到目前为止,我尝试了以下方法: 从 clone() 函数的子进程中使用 PTRACE_TRACEME:调用成功,...

12得票1回答
ptrace(PTRACE_PEEKUSER)和ptrace(PTRACE_PEEKDATA)的区别是什么?

在发布了很多有关ptrace的问题后(最近的5个问题都是我发的 :( ),当我替换掉之前的代码时,我终于得到了期望的输出。 reg_val[1] = ptrace(PTRACE_PEEKDATA, child, 4 * EBX, NULL); 使用reg_val[1] = ptrace(PT...

12得票3回答
使用ptrace跟踪所有子进程中的execve()调用

我正在尝试在Linux CentOS上编写一个工具来追踪所有生成的进程及其运行情况。本质上,我对遍历所有fork/clone并从execve()发出所有命令行感兴趣。Strace已经做到了一部分,但它也截断了调用和参数。我还想更好地了解ptrace()的工作原理。 因此,第一个障碍是找出如何...

12得票2回答
有时在运行ptrace时会丢失PTRACE_EVENT_VFORK

很抱歉我无法贴出可以复现此问题的代码。我的问题在于我不知道如何调试这个问题。 我使用带有PTRACE_O_TRACEFORK | PTRACE_O_TRACEEXEC | PTRACE_O_TRACEVFORK | PTRACE_O_TRACEVFORKDONE | PTRACE_O_TRA...