C 如何在Linux中检索指定线程的寄存器信息?
看看这个:C 如何在Linux中检索指定线程的寄存器信息?,c,linux,unix,cpu-registers,C,Linux,Unix,Cpu Registers,看看这个: (gdb) info reg rax 0x7ffff00008c0 140737219922112 rbx 0x7ffff7fe9700 140737354045184 rcx 0x33d9e182a0 222698767008 rdx 0x7ffff7fe9a10 140737354045968 rsi 0x7ffff00008c0 140737219922
(gdb) info reg
rax 0x7ffff00008c0 140737219922112
rbx 0x7ffff7fe9700 140737354045184
rcx 0x33d9e182a0 222698767008
rdx 0x7ffff7fe9a10 140737354045968
rsi 0x7ffff00008c0 140737219922112
rdi 0x0 0
rbp 0x7ffff7fe8e50 0x7ffff7fe8e50
rsp 0x7ffff7fe8e30 0x7ffff7fe8e30
r8 0x400afb 4197115
r9 0x0 0
r10 0x7ffff7fe8bb0 140737354042288
r11 0x33d9c0c480 222696621184
r12 0x33d9c11200 222696641024
r13 0x7ffff7fe99c0 140737354045888
r14 0x0 0
r15 0x3 3
rip 0x4008c1 0x4008c1 <write_to_thread_log(char const*)+29>
eflags 0x246 [ PF ZF IF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
(gdb)信息注册
rax 0x7ffff00008c0 140737219922112
rbx 0x7ffff7fe9700 140737354045184
rcx 0x33d9e182a0 222698767008
rdx 0x7ffff7fe9a10 140737354045968
rsi 0x7ffff00008c0 140737219922112
rdi 0x0
rbp 0x7ffff7fe8e50 0x7ffff7fe8e50
rsp 0x7ffff7fe8e30 0x7ffff7fe8e30
r8 0x400afb 4197115
r9 0x0 0
r10 0x7ffff7fe8bb0 140737354042288
r11 0x33d9c0c480 222696621184
r12 0x33d9c11200 222696641024
r13 0x7ffff7fe99c0 140737354045888
r14 0x0 0
r15 0x3
rip 0x4008c1 0x4008c1
eflags 0x246[PF ZF IF]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
我的问题是:
Linux中哪个接口可以实现此功能?
我的平台:Linux 2.6.32-279.el6.x86_64 x86_64 GNU/Linux
非常感谢您的帮助。系统调用是Linux中的标准调试工具,GDB使用它与正在调试的其他进程进行交互。GDB可能通过PTRACE\u GETREGS
或PTRACE\u GETREGSET
请求获取此信息
- 手册页
PTRACE\u GETREGS
或PTRACE\u GETREGSET
请求获取此信息
- 手册页
PTRACE\u GETREGS
参数,就像Jonathon说的。你能给我一个演示吗?像这样:void func(pthreat_t tid,void*reg_info){/?}@JonathonReinhart about ptrace(),我只看到'pid_t'参数,但是'pthread_t'参数在哪里?pid_t是int,pthread_t是无符号长的。如何将pthread\u t转换为pid\u t?这不安全,谢谢。ptrace()系统调用提供了一种方法,父进程可以通过该方法观察和控制另一进程的执行。但是如何获取指定线程的寄存器信息。像Windows API:GetThreadContext()。使用PTRACE\u GETREGS
参数,就像Jonathon说的。你能给我一个演示吗?像这样:void func(pthreat_t tid,void*reg_info){/?}@JonathonReinhart about ptrace(),我只看到'pid_t'参数,但是'pthread_t'参数在哪里?pid_t是int,pthread_t是无符号长的。如何将pthread\u t转换为pid\u t?这是不安全的。