前言¶
前面 do_fchmodat 示例中我们是通过 chmod 命令来进行演示程序工作结果的, 那么是如何知道 chmod 命令会调用 fchmodat 系统调用并且对应的内核函数是 do_fchmodat 呢,本文记录一下查找方法,这个方法也可以用于其他程序的系统调用。
通过 strace 找到程序使用的系统调用¶
首先是可以通过 strace 命令找到 chmod 所使用的系统调用:
$ strace chmod +x a.txt ... fchmodat(AT_FDCWD, "a.txt", 0775) = 0 ...
通过分析 strace 命令的输出,找到了 fchmodat 这个关键的系统调用。 下面要做的就是找出这个系统调用所使用的内核函数。
通过 /proc/kallsyms 文件查找内核函数¶
可以通过 /proc/kallsyms 查找 fchmodat 系统调用相关的函数 (通过 grep T 只显示全局可见的函数)
$ cat /proc/kallsyms |grep fchmodat |grep T 0000000000000000 T do_fchmodat 0000000000000000 T __x64_sys_fchmodat 0000000000000000 T __ia32_sys_fchmodat
可以看到可选的就是 do_fchmodat 和 __x64_sys_fchmodat 这两个, 他们对应的源代码可以通过 linux 源码 仓库 或 https://elixir.bootlin.com/ 进行查找, 经过尝试后发现实际应当使用 do_fchmodat 。
Comments