这里我们尝试修改我们自己的 GDB 版本以支持多线程环境。
到目前为止,我可以读取与每个线程相关的寄存器相关数据,但需要找出读取线程局部变量的方法。
为了读取线程局部变量,我需要知道如何使用 ptrace 命令计算偏移量。如果这里有人知道这对我真的很有帮助。
=谢谢。
这里我们尝试修改我们自己的 GDB 版本以支持多线程环境。
到目前为止,我可以读取与每个线程相关的寄存器相关数据,但需要找出读取线程局部变量的方法。
为了读取线程局部变量,我需要知道如何使用 ptrace 命令计算偏移量。如果这里有人知道这对我真的很有帮助。
=谢谢。
ptrace(2) 不支持 TLS(线程本地存储)。
了解 GDB 如何处理进程管理问题总是一个好主意。在这种情况下,GDB 使用 libthread_db。这是一个库(手册页),根据(特定于平台的)API 管理对 TLS 的访问。
有关如何在 Linux 中实现 TLS 的详细信息,请参阅 Ulrich Drepper 的Elf Handling for Threading Local Storage 。