如何从源代码中跟踪FreeBSD中的系统调用?

时间:2015-06-13 03:06:33

标签: freebsd system-calls truss

如何从源代码在FreeBSD 10.1 x86_64上记录系统调用(int 0x80sysenter/syscall的系统调用号和返回值)?

我知道truss可以完成这项工作,但我需要在每个系统调用期间记录其他信息,例如copyout的缓冲区。

我尝试找到truss的源代码,但失败了。我还尝试在amd64_syscall()中跟踪它们,但与truss的结果相比,结果似乎不完整。在实施中我应该关心哪些功能?

2 个答案:

答案 0 :(得分:2)

您尚未说明为什么需要这些。特别是,如果您出于安全目的需要这样做,那么您做错了。

你是什么意思失败了?来源在这里:http://bxr.su/FreeBSD/usr.bin/truss/

像这样的工具使用的通用机制称为ptrace(https://www.freebsd.org/cgi/man.cgi?query=ptrace),除其他外,它允许在执行系统调用时停止跟踪的线程。

但是,必须注意的是,虽然这样的机制允许您复制所有参数,但是在复制它们之后,其他线程可以更改上述args指向的内存,就在系统调用执行相同操作之前。如果您对此感兴趣,则需要使用MAC挂钩。

答案 1 :(得分:2)

可能不完全是你想要的,但你可能想看看ktrace(1)/ kdump(1)实用程序是如何工作的。