对我来说,文档对我来说有点模糊。上面写着:
跟踪器首先需要连接到追踪器上。每个线程都有附件和后续命令:在多线程进程中,每个线程可以单独连接到一个(可能不同的)跟踪器上,或者不附加,因此不进行调试。因此,"tracee“总是指”(一个)线程“,而不是”一个(可能是多线程的)进程“。
另外:
在以下请求中,pid指定要操作的tracee的线程ID。对于PTRACE_ATTACH、PTRACE_SEIZE、PTRACE_INTERRUPT和PTRACE_KILL以外的请求,必须停止tracee。
那么,如果我们有一个多线程进程,我们用PTRACE_SEIZE附加到一个线程上,然后用PTRACE_INTERRUPT停止它,那么我们能用PTRACE_PEEKTEXT、PTRACE_PEEKDATA、PTRACE_POKETEXT或PTRACE_POKEDATA读写整个进程的全局数据吗?
次要问题:如果对主要问题的回答是肯定的,为什么需要停止线程?我认为需要停止才能实现某种类型的锁定机制,但是如果一个线程停止了,那么其他线程可以写入ptrace试图自由读写的内存中。
发布于 2014-03-13 12:24:39
是的,您可以读取全局内存,但如果同时运行线程修改内存,则结果可能不一致。此外,线程上下文(寄存器和标志)只能用于跟踪、停止线程。
https://stackoverflow.com/questions/22378479
复制相似问题