如何从源代码中将系统调用( int 0x80和sysenter/syscall的syscall编号和返回值)记录在FreeBSD 10.1 x86_64上?
我知道truss可以完成这项工作,但我需要在每次系统调用期间记录其他信息,比如copyout缓冲区。
我试图定位truss的源代码,但失败了。此外,我试图在amd64_syscall()中跟踪它们,但是与truss的结果相比,结果似乎是不完整的。知道在实现中我应该关心哪些功能吗?
发布于 2015-06-13 07:24:23
你还没有说明为什么你需要这些。特别是,如果您出于安全目的需要这样做,那么您就做错了。
你失败是什么意思?资料来源:http://bxr.su/FreeBSD/usr.bin/truss/
像这样的工具使用的通用机制称为ptrace (https://www.freebsd.org/cgi/man.cgi?query=ptrace),除其他外,它允许在执行syscalls时停止跟踪线程。
但是,必须注意的是,虽然这样的机制允许您复制所有参数,但其他线程可以在复制前面的args之后,在syscall之前更改它们所指向的内存。如果这与你有任何关系的话,你想使用MAC挂钩。
发布于 2015-06-14 21:33:10
可能不完全是您想要的,但您可能想看看ktrace(1)/kdump(1)实用程序是如何工作的。
https://stackoverflow.com/questions/30814675
复制相似问题