如果一个且只有一个线程被停止,可以从多线程进程中跟踪读/写数据

Can ptrace read/write data from a multithreaded process given that one and only one thread is stopped?

本文关键字:多线程 进程 跟踪 数据 一个 线程 有一个 如果      更新时间:2023-10-16

关于ptrace的文档对我来说有点模糊。它说:

首先需要将跟踪树附加到跟踪器上。附件和后续的命令是每个线程执行的:在多线程进程中,每一个线程可以单独附加到(可能不同的)跟踪器,或者没有附加,因此没有调试。因此,"tracee"总是指"(一个)线程",而不是"一个(可能)线程"多线程)过程"。

:

在下面的请求中,pid指定跟踪对象的线程ID被采取行动对于PTRACE_ATTACH, PTRACE_SEIZE,PTRACE_INTERRUPT和PTRACE_KILL,跟踪树必须停止

所以,如果我们有一个多线程进程,我们使用PTRACE_SEIZE连接到一个线程,并使用PTRACE_INTERRUPT停止它,我们是否能够使用PTRACE_PEEKTEXT, PTRACE_PEEKDATA, PTRACE_POKETEXT或PTRACE_POKEDATA读取/写入整个进程的全局数据?

二次问题:如果对主要问题的回答是肯定的,那么为什么需要停止线程呢?我认为停止是实现某种锁定机制所需要的,但是如果一个线程被停止,那么其他线程可以写入ptrace试图自由读写的内存。

是的,您可以读取全局内存,但是如果有正在运行的线程并发地修改内存,则结果可能不一致。此外,线程上下文(寄存器和标志)只能为跟踪的、停止的线程获得。