gpt4 book ai didi

c++ - 如果只有一个线程停止,ptrace 是否可以从多线程进程读取/写入数据?

转载 作者:行者123 更新时间:2023-11-30 17:37:31 25 4
gpt4 key购买 nike

documentation on ptrace 对我来说有点模糊。它说:

A tracee first needs to be attached to the tracer. Attachment and subsequent commands are per thread: in a multithreaded process, every thread can be individually attached to a (potentially different) tracer, or left not attached and thus not debugged. Therefore, "tracee" always means "(one) thread", never "a (possibly multithreaded) process".

另外:

In the following requests, pid specifies the thread ID of the tracee to be acted on. For requests other than PTRACE_ATTACH, PTRACE_SEIZE, PTRACE_INTERRUPT and PTRACE_KILL, the tracee must be stopped.

那么,如果我们有一个多线程进程,并且使用 PTRACE_SEIZE 附加到单个线程并使用 PTRACE_INTERRUPT 停止它,我们是否能够使用 PTRACE_PEEKTEXT、PTRACE_PEEKDATA、PTRACE_POKETEXT 或 PTRACE_POKEDATA 读/写整个进程的全局数据?

第二个问题:如果主要问题的答案是肯定的,为什么需要停止线程?我认为停止是实现某种锁定机制所必需的,但是如果单个线程停止,那么其他线程可以写入 ptrace 尝试自由读/写的内存。

最佳答案

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

关于c++ - 如果只有一个线程停止,ptrace 是否可以从多线程进程读取/写入数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22378479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com