3

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

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

我试图找到 的源代码truss,但失败了。我也尝试在 中追踪它们amd64_syscall(),但与truss. 关于在实现中我应该关心哪些功能的任何想法?

4

2 回答 2

2

你还没有具体说明你为什么需要这些。特别是,如果您出于安全目的需要它,那么您做错了。

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

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

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

于 2015-06-13T07:24:23.787 回答
2

可能不完全是您要查找的内容,但您可能想了解一下 ktrace(1)/kdump(1) 实用程序的工作原理。

于 2015-06-14T21:33:10.457 回答