2013-07-04 39 views
1

看看这个:如何在Linux中检索指定线程的注册信息?

(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 

我的问题是: 哪个接口可以真正实现在Linux的这个功能呢? 我的平台:Linux 2.6.32-279.el6.x86_64 x86_64 GNU/Linux 非常感谢您的帮助。

+1

注意我删除了 “芯” 的标签,因为它是如此暧昧。 –

+0

非常感谢。 – Charles

回答

4

系统调用ptrace是Linux中的标准调试工具,GDB用它来与正在调试的其他进程进行交互。 GDB可能会通过PTRACE_GETREGSPTRACE_GETREGSET请求获取此信息。

+0

谢谢。 ptrace()系统调用提供了一种方法,通过它父进程可以观察和控制另一个进程的执行。 但是如何获取指定线程的寄存器信息。 与Windows-API类似:GetThreadContext()。 – Charles

+1

使用'PTRACE_GETREGS'参数,就像Jonathon说的那样。 – duskwuff

+0

@Charles你甚至读*我的答案? –