Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在Linux中检索指定线程的寄存器信息?_C_Linux_Unix_Cpu Registers - Fatal编程技术网

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
请求获取此信息

  • 手册页
系统调用是Linux中的标准调试工具,GDB使用它与正在调试的其他进程进行交互。GDB可能通过
PTRACE\u GETREGS
PTRACE\u GETREGSET
请求获取此信息

  • 手册页

注意我删除了“核心”标签,因为它太模糊了。注意我删除了“核心”标签,因为它太模糊了。谢谢。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?这不安全,谢谢。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?这是不安全的。