gpt4 book ai didi

c - 在 SIGTRAP 上是否有任何获取指令指针的不可知方法?

转载 作者:太空狗 更新时间:2023-10-29 11:07:14 25 4
gpt4 key购买 nike

ptrace 的角度来看,我正在寻找一种与架构无关的方法来获取生成 SIGTRAP 的最后一次尝试的指令(或过去的指令)的指令指针(又名程序计数器)示踪剂。

一种依赖架构的方式是使用PTRACE_GETREGS并选择例如EIP在 i386 上,RIP在 x86_64 上,PC在 ARM 等上。

我试过使用 siginfo.si_addr以及siginfo.si_ptr来自 PTRACE_GETSIGINFO -返回的结构,但这些值看起来完全错误(4 个十六进制数字而不是 8 个,甚至与真实地址都不相似),所以它们似乎不是我需要的。

在 Linux 中,我还尝试使用 /proc/<pid>/task/<tid>/stat 的第 30 个字段,内核填充 fs/proc/array.c:do_task_stat()KSTK_EIP(task) (尽管它被命名为以 x86 为中心,但似乎是为许多其他架构定义的)。但出于某种原因,在我的 ARMv6 Linux 4.9.28+ (Raspbian 8) 上,我的程序计数器和堆栈指针都为零。

那么,是否有任何架构无关的方法来确定由 POSIX 定义的或至少在 Linux 中可用的当前/下一个地址?

最佳答案

您可以使用 /proc/[pid]/syscall

mark@ubuntu:~$ gdb python
...
...
...
Program received signal SIGINT, Interrupt.
0x00007ffff78ed573 in __select_nocancel () at ../sysdeps/unix/syscall-template.S:84
84 ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb)

mark@ubuntu:~/$ ps aux | grep python
mark 77858 0.2 0.7 90216 37780 pts/2 S+ 15:13 0:00 gdb python
mark 77860 0.0 0.1 38416 6424 pts/2 t 15:13 0:00 /usr/bin/python

(看到跟踪 77860 - t)

mark@ubuntu:~/$ sudo cat /proc/77860/syscall
23 0x1 0x7fffffffd980 0x0 0x0 0x0 0x7ffff7fdb700 0x7fffffffd958 0x7ffff78ed573

0x7fffffffd958sp0x7ffff78ed573 是程序计数器。

我找不到任何对此处有帮助的 ptrace 调用。

http://man7.org/linux/man-pages/man5/proc.5.html

   /proc/[pid]/syscall (since Linux 2.6.27)
This file exposes the system call number and argument regis‐
ters for the system call currently being executed by the
process, followed by the values of the stack pointer and pro‐
gram counter registers. The values of all six argument regis‐
ters are exposed, although most system calls use fewer regis‐
ters.

If the process is blocked, but not in a system call, then the
file displays -1 in place of the system call number, followed
by just the values of the stack pointer and program counter.
If process is not blocked, then the file contains just the
string "running".

关于c - 在 SIGTRAP 上是否有任何获取指令指针的不可知方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45532515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com