我知道strace
用来ptrace
做这项工作,
但它需要运行目标进程TRACE_ME
,
这不适用于已经运行的进程的情况。
它如何在已经运行的进程上工作?
strace -p <PID>
----> 将进程附加到strace。“-p”选项用于进程的PID。
strace -e trace=read,write -p <PID>
--> 通过这种方式,您还可以跟踪事件的进程/程序,例如读取和写入(在此示例中)。所以在这里它将打印所有此类事件,包括进程的读取和写入系统调用。
其他此类示例
-e trace= network (Trace all the network related system calls.)
-e trace=signal (Trace all signal related system calls.)
-e trace=ipc (Trace all IPC related system calls.)
-e trace=desc (Trace all file descriptor related system calls.)
-e trace=memory (Trace all memory mapping related system calls.)
还有很多..
trace是您可以与-e选项一起使用的众多选项之一。
按Ctrl-C以中止 strace 的跟踪。
通过键入
和手册页来查看帮助部分以获取有关strace的简要摘要以获取详细信息。strace -h
注意:跟踪的进程运行缓慢。
的详细信息ptrace()
是特定于操作系统的。
ptrace(PTRACE_TRACEME, ...)
在 Linux 上,孩子可以使用;请求被其父母追踪。但是,或者,一个进程可以将自己附加到另一个进程ptrace(PTRACE_ATTACH, ...)
。
请参阅Linuxptrace(2)
手册页(如果您真的想要详细信息,请参阅strace
源代码和从 开始的内核源代码kernel/ptrace.c
)。