问题标签 [ptrace]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2732 浏览

linux - 检测信号的发送者(linux,ptrace)

我可以区分直接传递给进程和通过调试器传递的信号吗?

情况1:

案例二:

那么,如何在信号处理程序中检测到它是由调试器重新传递还是由系统发送?

操作系统是 Linux,内核是 2.6.30。程序是用纯 C 编写的。在实际程序中使用 SIGALRM,但它不是由 生成alarm(),而是由 生成setitimer()

0 投票
2 回答
3525 浏览

c++ - 如何在 Linux 上使用 Ptrace 打印 C++ 其他进程的调用堆栈

我正在开发一个需要Linux 上所有执行进程的调用堆栈的应用程序。我正在尝试使用 ptrace 但无法继续使用它,因为我需要在代码中遵循的步骤对我来说并不清楚。

我也尝试过回溯,但它的使用仅限于当前进程。

有人可以指导我吗?

谢谢,桑迪普

0 投票
2 回答
1256 浏览

linux - 我们如何在 Linux 上从 Spack Pointer(reg/SP) 获取函数名称?

我正在使用 ptrace 获取与 Linux 上的 Callstack 相关的信息。我可以使用 ptarces 返回的寄存器检索指向我的堆栈的 Spack 指针。但是使用这个堆栈指针如何检索与当前调用堆栈的函数名称和签名相关的信息?

是否有任何 Linux API 可以遍历此调用堆栈?

请帮助..我正在寻找它从过去几天...

提前感谢桑迪普

0 投票
1 回答
565 浏览

c - 使用 ptrace 生成堆栈转储

我正在 *nix 上编译 C++,我想在程序中的任意点生成堆栈转储 a),b) 在任何信号期间,尤其是在 SIGSEGV 期间。

谷歌告诉我 ptrace 可能是这项工作的工具,但我找不到任何可以理解的遍历堆栈的例子。得到返回地址,是的,但是 NEXT 的返回地址呢?那么在那个时候提取函数的符号名呢?与矮人有关吗?

非常感谢,如果你能告诉我从这里去哪里。

0 投票
4 回答
867 浏览

linux - 外部程序中导致 SIGSEGV 的指令地址

我想获取导致外部程序到 SIGSEGV 的指令地址。我尝试为此使用 ptrace,但我从内核空间获取 EIP(可能是默认信号处理程序?)。GDB 如何获得正确的 EIP?

有没有办法让 GDB 使用一些 API 提供这些信息?

编辑:我没有程序的来源,只有二进制可执行文件。我需要自动化,所以我不能简单地在 GDB 中使用“运行”、“信息寄存器”。我想在我自己的迷你调试器中实现“信息寄存器”:)

0 投票
3 回答
1897 浏览

c - 使用 ptrace 在 Linux 上进行 Stack Walk

以下是我的要求。

当进程 A 正在运行时。

  1. 使用 PTRACE_ATTACH 附加来自 B 的进程 A。
  2. 开始循环
  3. 停止进程 A
  4. 读寄存器
  5. 恢复过程 A
  6. 睡觉(1)
  7. 结束循环
  8. 分离A

我正面临从循环中启动和恢复进程 A 的问题。我尝试了kill(pid,SIGSTOP),kill(pid,SIGCONT),PTRACE_CONT的组合。但没有用。

请问还有其他解决方案吗?

提前致谢。桑迪普

0 投票
1 回答
2934 浏览

ptrace - 64位Linux上程序/指令指针(RIP)和基/帧指针(RBP)之间的关系

我需要一些帮助来检索Linux 64 位机器上调用堆栈的指令指针 ( RIP )。我可以使用 ptrace 遍历堆栈并检索所有帧/基指针(RBP)值。但是因为我想要 IP 值,所以 RIP 和 RBP 之间的算术和概念关系是什么。我假设 RIP 值存储在 (RBP + 8) 位置,并且可以使用 ptrace PEEKDATA 读取它。我的假设正确吗?

0 投票
1 回答
3772 浏览

ptrace - struct reg 和 struct user_regs_struc 之间的区别?

Linux 64 位机器上的struct regstruct user_regs_struc有什么区别?

0 投票
2 回答
302 浏览

c - HP-UX 上的 PTRACE 编程

任何人都可以给我任何好的链接,在那里我可以获得一些关于如何使用 ptrace 为 HP-UX 编程的信息。

不要发布linux ptrace的链接。

0 投票
1 回答
2474 浏览

linux - ptrace'ing 多线程应用程序

我有一个类似“调试器”的应用程序,名为hyper-ptrace. 它开始user_appl3使用 NPTL 进行多线程处理。

hyper-ptrace 的主循环是:

SIGTRAP 由硬件在每个线程的某个周期间隔为 user_appl3 生成,并将其传递给某些线程。间隔可以是 100..1 毫秒甚至更短。它是一种带有中断的每个 CPU 时钟。每个线程仅在其 CPU 上运行(与亲和性绑定)。

所以有问题1

如果 thread1 得到 TRAP 并且调试器进入do_some_analysis_of_the_child, (所以调试器不会wait3为第二个线程做一个),并且稍后 thread2 也得到了 TRAP,Linux 内核会做什么?

在我看来:thread1 将被停止,因为它得到一个信号并且有一个等待调试器。但是 thread2 继续运行(是吗?)。当 thread2 收到信号时,不会有等待调试器,因此 TRAP 可以传递给 thread2 本身,有效地杀死它。我对吗?

还有第二个问题question2

对于这种情况,我应该如何重写 主循环hyper-ptrace降低通过调试器将信号传递到用户线程的机会?也不能更改生成陷阱的硬件和用户应用程序。停止第二个线程也不是变体。

我需要分析两个线程。有些部分只有在线程停止时才能完成。

提前致谢!