在Linux中如何定位系统调用?

在Linux中如何定位系统调用?,linux,system-calls,Linux,System Calls,我试图在Red Hat 8.0中添加一个新的系统调用,但我对该机制的某些方面感到困惑。我一直在遵循这个指南:它详细介绍了在entry.S和unistd.h中更新syscall表的步骤 然而,我似乎无法弄清楚编译器实际上是如何根据这些信息找到系统调用的实现位置的。很明显,有一些东西涉及到include,但是我找不到任何include的迹象,也找不到代码中的许多系统调用。我需要做什么才能找到我的系统调用 C库提供的函数恰巧看起来像系统调用。实际发生的是调用C库函数,然后它进行系统调用 如果您添加了一

我试图在Red Hat 8.0中添加一个新的系统调用,但我对该机制的某些方面感到困惑。我一直在遵循这个指南:它详细介绍了在
entry.S
unistd.h
中更新syscall表的步骤


然而,我似乎无法弄清楚编译器实际上是如何根据这些信息找到系统调用的实现位置的。很明显,有一些东西涉及到include,但是我找不到任何include的迹象,也找不到代码中的许多系统调用。我需要做什么才能找到我的系统调用

C库提供的函数恰巧看起来像系统调用。实际发生的是调用C库函数,然后它进行系统调用

如果您添加了一个新的系统调用,那么为了使其易于使用,您需要将其添加到C库中并重新编译

或者可以使用C库提供的syscall函数和宏:syscall和_syscall


请尝试
man系统调用
man\u系统调用
查看详细信息。

C库提供的函数恰好看起来像系统调用。实际发生的是调用C库函数,然后它进行系统调用

如果您添加了一个新的系统调用,那么为了使其易于使用,您需要将其添加到C库中并重新编译

或者可以使用C库提供的syscall函数和宏:syscall和_syscall


请尝试
man系统调用
man\u系统调用
查看详细信息。

顺便说一句,RedHat 8.0现在真的很旧了。为什么不使用Linux内核2.6.31?我会用Gentoo作为发行版。对于程序员来说,没有什么比Gentoo更好的了,IMHO。顺便说一句,Redhat8.0现在真的很老了。为什么不使用Linux内核2.6.31?我会用Gentoo作为发行版。对于程序员来说,没有什么比Gentoo更好的了,IMHO。