如何从源代码记录 FreeBSD 10.1 x86_64 上的系统调用(系统调用号和返回值,对于 int 0x80
和 sysenter/syscall
)?
我知道 truss
可以完成这项工作,但我需要在每次系统调用期间记录其他信息,例如 copyout
的缓冲区。
我试图找到 truss
的源代码,但失败了。我也尝试在 amd64_syscall()
中追踪它们,但与 truss
的结果相比,结果似乎不完整。关于我应该在实现中关心哪些功能的任何想法?
最佳答案
您还没有说明为什么需要这些。特别是,如果您出于安全目的需要这样做,那您就错了。
你失败了是什么意思?来源在这里:http://bxr.su/FreeBSD/usr.bin/truss/
此类工具使用的通用机制称为 ptrace ( https://www.freebsd.org/cgi/man.cgi?query=ptrace ),除其他外,它允许在执行系统调用时停止跟踪的线程。
然而,必须注意的是,虽然这种机制允许您复制所有参数,但其他线程可以在您复制它们之后更改上述 args 指向的内存,就在系统调用执行相同操作之前。如果您有任何顾虑,您想使用 MAC Hook 。
关于freebsd - 如何从源代码跟踪 FreeBSD 中的系统调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30814675/