如果一个且只有一个线程被停止,可以从多线程进程中跟踪读/写数据
Can ptrace read/write data from a multithreaded process given that one and only one thread is stopped?
关于ptrace的文档对我来说有点模糊。它说:
也首先需要将跟踪树附加到跟踪器上。附件和后续的命令是每个线程执行的:在多线程进程中,每一个线程可以单独附加到(可能不同的)跟踪器,或者没有附加,因此没有调试。因此,"tracee"总是指"(一个)线程",而不是"一个(可能)线程"多线程)过程"。
:
所以,如果我们有一个多线程进程,我们使用PTRACE_SEIZE连接到一个线程,并使用PTRACE_INTERRUPT停止它,我们是否能够使用PTRACE_PEEKTEXT, PTRACE_PEEKDATA, PTRACE_POKETEXT或PTRACE_POKEDATA读取/写入整个进程的全局数据?在下面的请求中,pid指定跟踪对象的线程ID被采取行动对于PTRACE_ATTACH, PTRACE_SEIZE,PTRACE_INTERRUPT和PTRACE_KILL,跟踪树必须停止
二次问题:如果对主要问题的回答是肯定的,那么为什么需要停止线程呢?我认为停止是实现某种锁定机制所需要的,但是如果一个线程被停止,那么其他线程可以写入ptrace试图自由读写的内存。
是的,您可以读取全局内存,但是如果有正在运行的线程并发地修改内存,则结果可能不一致。此外,线程上下文(寄存器和标志)只能为跟踪的、停止的线程获得。
相关文章:
- 在C++中使用cURL和多线程
- 多线程:线程或进程.h - C++
- 优化吞吐量:多线程与多进程
- 多个线程/进程是否可以在不同步的情况下同时从/写入文件的非重叠区域?
- 多线程中的 std::basicstring 的运行时分段错误C++点燃进程
- 在 Linux 中从单独的单线程进程生成多线程进程时出现问题
- 使用 c++ 的多线程和并行进程
- 与多线程一起登录多进程应用程序
- 多线程排挤了其他进程
- C++如何检查文件是否在使用-多线程多进程系统
- 多线程和多进程应用程序的锁定机制之间有什么区别
- gdb是如何连接到多线程进程的
- 提振.Asio复合操作在单线程和多线程进程
- c++多线程和进程中的向量
- gdb如何连接到多线程进程
- 独立的多线程进程同时阻塞
- 在多线程进程中处理信号的示例
- 多线程进程中的信号处理
- 多线程/分叉服务器守护进程的模型
- 如果一个且只有一个线程被停止,可以从多线程进程中跟踪读/写数据