如何从源代码在 FreeBSD 10.1 x86_64 上记录系统调用(系统调用号和返回值,对于int 0x80
和)?sysenter/syscall
我知道truss
可以完成这项工作,但我需要copyout
在每个系统调用期间记录其他信息,例如缓冲区。
我试图找到 的源代码truss
,但失败了。我也尝试在 中追踪它们amd64_syscall()
,但与truss
. 关于在实现中我应该关心哪些功能的任何想法?
如何从源代码在 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 挂钩。
可能不完全是您要查找的内容,但您可能想了解一下 ktrace(1)/kdump(1) 实用程序的工作原理。