如何从应用程序中提取系统调用?它们与源代码中使用的函数相同吗?

如何从应用程序中提取系统调用?它们与源代码中使用的函数相同吗?

我试图从源代码中提取 SysCalls,但我有点困惑。我找到了类似的来源https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.mdhttps://filippo.io/linux-syscall-table/系统调用与 C 中调用的函数相同吗?或者系统调用类似于 syscall(SYS_gettid) ,其中系统调用函数调用和实际的系统调用?

我正在尝试提取应用程序使用的系统调用。

答案1

大多数时候,您不会在程序的源代码中找到显式的系统调用:应用程序是通过调用相应语言的运行时库来编写的,并且正是该库负责调用内核。许多语言运行时库依赖 C 库依次委派该责任。

C 库函数和系统调用之间甚至不存在一一对应的关系。一些 C 库函数根本不使用任何系统调用;其他人则使用多个。映射甚至从一种架构变为另一种架构 -Linux 有许多特定于体系结构的系统调用— 实际使用的系统调用很大程度上取决于正在运行的内核和 C 库,例如随着内核添加新的系统调用并对它们的支持添加到 C 库中。

答案2

下载 的源码installwatch、部分checkinstall包,并修改installwatch

installwatch使用一种LD_PRELOAD技巧来拦截所有系统调用。读man ld.so

相关内容