如何从源代码跟踪 FreeBSD 中的系统调用?
How to trace system calls in FreeBSD from source code?
如何从源代码在 FreeBSD 10.1 x86_64 上记录系统调用(int 0x80
和 sysenter/syscall
的系统调用编号和 return 值?
我知道 truss
可以完成这项工作,但我需要在每次系统调用期间记录其他信息,例如 copyout
的缓冲区。
我试图找到 truss
的源代码,但失败了。我也尝试在 amd64_syscall()
中追踪它们,但与 truss
的结果相比,结果似乎不完整。知道在实现中我应该关注哪些功能吗?
您没有具体说明为什么需要这些。特别是,如果您出于安全目的需要这样做,那您就做错了。
你失败了是什么意思?来源在这里:http://bxr.su/FreeBSD/usr.bin/truss/
像这样的工具使用的一般机制称为 ptrace (https://www.freebsd.org/cgi/man.cgi?query=ptrace),除其他外,它允许在执行系统调用时停止被跟踪的线程。
但是,必须注意,虽然此类机制允许您复制所有参数,但其他线程可以 更改 复制上述参数后指向的内存,就在系统调用做同样的事情。如果你对此有任何顾虑,你想使用 MAC 钩子。
可能不完全是您要查找的内容,但您可能想了解一下 ktrace(1)/kdump(1) 实用程序的工作原理。
如何从源代码在 FreeBSD 10.1 x86_64 上记录系统调用(int 0x80
和 sysenter/syscall
的系统调用编号和 return 值?
我知道 truss
可以完成这项工作,但我需要在每次系统调用期间记录其他信息,例如 copyout
的缓冲区。
我试图找到 truss
的源代码,但失败了。我也尝试在 amd64_syscall()
中追踪它们,但与 truss
的结果相比,结果似乎不完整。知道在实现中我应该关注哪些功能吗?
您没有具体说明为什么需要这些。特别是,如果您出于安全目的需要这样做,那您就做错了。
你失败了是什么意思?来源在这里:http://bxr.su/FreeBSD/usr.bin/truss/
像这样的工具使用的一般机制称为 ptrace (https://www.freebsd.org/cgi/man.cgi?query=ptrace),除其他外,它允许在执行系统调用时停止被跟踪的线程。
但是,必须注意,虽然此类机制允许您复制所有参数,但其他线程可以 更改 复制上述参数后指向的内存,就在系统调用做同样的事情。如果你对此有任何顾虑,你想使用 MAC 钩子。
可能不完全是您要查找的内容,但您可能想了解一下 ktrace(1)/kdump(1) 实用程序的工作原理。