使用PTRACE读取进程的stderr(2)

时间:2017-05-08 18:00:48

标签: c linux unix system-calls ptrace

亲爱的Stackoverflowers :),

在过去的几周里,我一直潜入ptrace系统调用的模糊(至少对我而言)世界。我的目标是读取不同进程的stderr 。出于调试目的,它可能是一个子进程,但在生产中我想阅读任何(我想要的root权限)。

我的理解是说我必须遵循以下流程:

  1. PTRACE_ATTACH
  2. PTRACE_SYSCALL 以在下次跟踪触发系统调用时收到通知,
  3. waitpid 系统调用,以便能够访问数据。
  4. PTRACE_GETREGS 了解是否是系统调用,以及是否写入fd编号为2.
  5. PTRACE_PEEKDATA ,以阅读已写入fd number 2的文字。
  6. 有人可以帮我验证我是否正确。然后了解如何实施正确的步骤?

    这将有很大帮助。

    到目前为止我的消息来源是:

    http://man7.org/linux/man-pages/man2/ptrace.2.html
    https://groogroot.eu/the-ptrace-system-call/ (really good tutorial)
    https://keithtech.wordpress.com/2013/10/21/how-to-use-ptrace_getregs/
    https://webdocs.cs.ualberta.ca/~paullu/C498/meng.ptrace.slides.pdf
    https://github.com/eklitzke/ptrace-call-userspace
    https://eklitzke.org/ptrace
    

    更新:

    我已经能够读取进程正在转储到std err的数据。我现在的目标是完全理解它是如何工作的。一旦准备就绪,那么这个问题将由我自己的答案跟进。

    可以在Mittcher Glove Github repo

    中看到工作示例

0 个答案:

没有答案