问题标签 [ptrace]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
18044 浏览

c - 在 OS X 中读取其他进程的内存?

我一直在尝试了解如何在 Mac OS X 上读取其他进程的内存,但我运气不佳。我在网上看到了很多使用ptracewith等的示例,但是它在 BSD [ ]PEEKDATA上没有该选项。man ptrace

如何在 Mac OS X 上读取和写入另一个进程的内存?

0 投票
3 回答
509 浏览

cross-platform - 跨平台文件访问跟踪

我希望能够跟踪特定程序调用的文件读/写。不需要有关实际交易的信息,只需要涉及的文件名。

有没有跨平台的解决方案?
各种平台特定的方法是什么?
在 Linux 上,我知道有 strace/ptrace(如果有更快的方法也很好)。
我认为在 mac os 上有 ktrace。
窗户呢?

此外,如果可以阻止(停止)文件访问直到稍后的某个时间,那将是惊人的。

谢谢!

0 投票
1 回答
7100 浏览

windows - Windows 中有类似 Linux ptrace 系统调用的东西吗?

阅读Monitoring certain system calls done by a process in Windows,我想知道 Windows 是否等同于ptrace系统调用或编程解决方法。

0 投票
1 回答
5963 浏览

windows - Windows XP/2003 中有类似 Linux ptrace 系统调用的东西吗?

阅读Monitoring certain system calls done by a process in Windows,我想知道 Windows 是否等同于ptrace系统调用或编程解决方法。

在 Windows 中有类似 Linux ptrace 系统调用的东西吗?,但它需要最新的 Windows 版本。

0 投票
6 回答
1445 浏览

linux - 访问被跟踪进程的内存空间的低开销方式?

我正在寻找一种有效的方法来访问(用于读取和写入操作)我的 ptraced 子进程的内存空间。正在访问的块的大小可能从几个字节到几兆字节不等,因此使用 ptrace 调用一次只读取一个单词PTRACE_PEEKDATAPTRACE_POKEDATA在每次调用时切换上下文似乎是对资源的毫无意义的浪费。不过,我能找到的唯一一种替代解决方案是/proc/<pid>/mem文件,但它早已被设为只读。

有没有其他(相对简单的)方法来完成这项工作?理想的解决方案是以某种方式与其父进程共享我的子进程的地址空间,然后使用简单的 memcpy 调用在两个方向上复制我需要的数据,但我不知道如何做以及从哪里开始。

有任何想法吗?

0 投票
2 回答
3198 浏览

linux - 您可以使用多个线程来跟踪应用程序吗?

我正在编写一个主要针对 Linux 的面向 GUI 的调试器,但我计划将来移植到其他操作系统。因为 GUI 必须始终保持交互,所以我有几个线程处理不同的事情。

首先,我有一个“调试事件”线程,它只是循环等待 waitpid 返回并将接收到的事件传递给其他线程。我这样做是因为 waitpid 没有超时,这使得它很难与其他事件循环集成并保持响应(waitpid 可以无限期挂起!)。

到目前为止,这种策略对于 Linux 构建非常有效。最近我一直试图让我的调试器线程感知(如在被调试应用程序中的线程中,而不是调试器本身)。

所以我将 ptrace 选项设置为跟踪克隆事件并查找将高 16 位设置为PTRACE_EVENT_CLONE. 然后我PTRACE_GETEVENTMSG用来获取新线程的 TID。这一切都在我的小型测试工具应用程序中运行良好。但是由于某种原因,当我将该代码放入我的实际调试器时它失败了。(我收到“没有这样的过程”错误代码)

我想到的一件事是 Windows 有一个规则,即只有附加到应用程序的线程才能侦听调试事件。Linux 的 ptrace 有类似的限制吗?如果是这样,为什么我的代码适用于其他调试事件?

编辑:

似乎至少 waitpid 支持从不同的线程等待,手册页说:

在 Linux 2.4 之前,线程只是进程的一种特殊情况,因此一个线程不能等待另一个线程的子线程,即使后者属于同一个线程组。然而,POSIX 规定了这样的功能,从 Linux 2.4 开始,一个线程可以并且默认情况下会等待同一线程组中其他线程的子线程。

所以最多这是一个 ptrace 限制。

0 投票
2 回答
1327 浏览

c - 使用 PTRACE_SINGLESTEP 计算进程的机器指令

在 Linux 机器上,我使用带有 PTRACE_SINGLESTEP 参数的 ptrace 来计算程序的机器指令数。我关注了这篇文章:http ://www.ncsu.edu/it/mirror/ldp/LDP/LGNET/81/sandeep.html 。

然而,结果对我来说似乎很奇怪。对于一个非常简单的程序,计算了超过 95000 条机器指令。测试程序是

这里发生了什么?文章中的代码是错误的吗?(我看不出它有什么问题。)如果没有,是什么原因导致如此简单的程序需要> 95000条指令?

0 投票
2 回答
1083 浏览

linux - 寻找一种捕获 CPUID 指令的方法

我正在寻找一种巧妙的方法来捕获和摆弄 Linux 进程的 CPUID 指令。玩弄 ptrace() 并修补由进程创建的所有可执行 mmap'ed 区域中的所有 cpuid 操作码,用 int3 替换它们。由于 CPUID 操作码字节经常作为其他较长操作码的一部分出现,因此效果不佳。

所以基本上我正在寻找一种方法,允许我不在特定的内存地址上设置断点,而是在每次调用操作码时设置断点。任何人都知道如何做到这一点?

0 投票
2 回答
4968 浏览

linux - ptrace'ing 父进程

子进程可以使用ptrace系统调用来跟踪其父进程吗?

操作系统是linux 2.6

谢谢。

upd1:我想从“自身”跟踪 process1。这是不可能的,所以我做 fork 并尝试ptrace(process1_pid, PTRACE_ATTACH)从子进程中做。但我不能,有一个奇怪的错误,比如内核禁止子跟踪他们的父进程

UPD2:安全策略可以禁止此类跟踪。哪些政策会这样做?内核中的检查代码在哪里?

UPD3:在我的嵌入式 linux 上,PEEKDATA 没有错误,但 GETREGS 没有:

错误号 = EPERM

0 投票
2 回答
1964 浏览

c - 在 ptraced Linux 进程中调用 ptrace

有人在维基百科的“ptrace”文章中添加了声称,在 Linux 上,ptraced 进程本身不能 ptrace 另一个进程。我正在尝试确定是否(如果是,为什么)是这种情况。下面是我设计的一个简单程序来测试它。我的程序失败(子子进程无法正常运行),但我非常确信这是我的错误,而不是根本问题。

本质上,初始进程A分叉了进程B,而 B 又分叉了CA ptrace 其子BB ptrace 其子C。设置完成后,所有三个进程都会每秒 写入一次 print AB或stdout 。C

在实践中,AB工作正常,但C只打印一次然后卡住。检查ps -eo pid,cmd,wchan显示C卡在内核函数ptrace_stop中,而其余的都在hrtimer_nanosleep我希望所有三个都出现的位置。

偶尔这三个都可以工作(所以程序会打印 Cs 以及 As 和 Bs),这让我相信在初始设置中存在一些竞争条件。

我对可能出错的猜测是:

  • A看到 aSIGCHLD相关的 a 与B看到 aSIGCHLDC的信号有关,并且 wait(2) 报告两者都来自B(但是对两个 pid 的 PTRACE_CONT 的 hacky 调用并不能解决问题)?
  • C应该由B跟踪- 是否C继承了A的 ptrace (并且B对 ptrace 的调用既没有出错也没有覆盖它)?

谁能弄清楚我做错了什么?谢谢。