【发布时间】:2015-06-04 01:27:02
【问题描述】:
是否可以从 strace 日志中执行一系列系统调用。 如果是这样,如何? 这个人做了我想做的事(我想……):
recvmsg(3, 0x7ffffe502cf0, 0) = -1 EAGAIN (Resource temporarily unavailable)
write(4, "\1\0\0\0\0\0\0\0", 8) = 8
poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}], 2, 0) = 1 ([{fd=4, revents=POLLIN}])
poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}], 2, 0) = 1 ([{fd=4, revents=POLLIN}])
read(4, "\1\0\0\0\0\0\0\0", 16) = 8
poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}], 2, 0) = 0 (Timeout)
read(4, 0x7ffffe502e70, 16) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=3, events=POLLIN|POLLOUT}], 1, 4294967295) = 1 ([{fd=3, revents=POLLOUT}])
writev(3, [{"\22\0\7\0\32\0 \1H\1\0\0\6\0\0\0 \27\31\0\1\0\0\0\232>\205\2\31\0\v\0"..., 284}, {NULL, 0}, {"", 0}], 3) = 284
recvmsg(3, {msg_name(0)=NULL, msg_iov(1)=[{"\34\0\27E\32\0 \1H\1\0\0\233>\205\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 128
recvmsg(3, {msg_name(0)=NULL, msg_iov(1)=[{"\17\0\36E\32\0 \1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 224
recvmsg(3, {msg_name(0)=NULL, msg_iov(1)=[{"\222\0\37E\234\0\0\0FC \1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 4096}], msg_controllen=0, msg_flags=0}, 0) = 32
recvmsg(3, {msg_name(0)=NULL, msg_iov(1)=[{"\22\0$E\234\0\0\0+\2\240\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 256
等等……
【问题讨论】:
-
真正的最终目标是什么?
-
这只是一个例子,但有时我想捕捉 GUI 进程执行的内容。 (可能在我自己的脚本中使用)这个具体的例子只是我点击“最小化所有”时从 lxpanel 捕获的。
-
好主意。我使用了类似的技术来了解和使用 inotify() 系统调用。我编写了一个简短的 C 程序,将可执行文件命名为“inotify”,并将其放入脚本中。它需要一个文件名和另一个脚本名,因此当文件更改时,脚本会运行。 strace 是一个方便的小工具。
-
老实说,我期待一些简单的东西,比如一个明显的 exec("wmctrl something");在这种情况下。有没有办法根据系统调用捕获来模仿动作?
-
我必须坚持我在下面的回答。不。我希望是的。
标签: system-calls strace