c中外部函数的来源

时间:2013-11-11 19:45:47

标签: c header

我正在阅读一个c头文件并正在搜索特殊功能。我找到了extern声明的函数,但我需要知道该函数的来源。考虑到包含目录由许多其他头文件组成,我如何才能找到该函数的相对文件?

详细地说,我在unistd.h头文件中搜索写函数,这个头有很多包含的头,所以我很困惑写函数的定义在哪里。

2 个答案:

答案 0 :(得分:1)

既然你提到你在Ubuntu,你应该看一下glibc源代码。

一般情况下,系统调用的C库实现是在汇编(不是在C)中完成的,其中包含一系列复杂的宏,对于x86 linux架构,位于sysdeps/unix/sysv/linux/i386/sysdep.h(其中一些是树中其他地方的各种其他文件也称为sysdep.h和sysdep.S) - 在编译时使用多个文件生成调用宏来实现写系统调用的实际文件:

一般来说,最终结果并不多看 - 它从堆栈中取三个参数并将它们放在寄存器中,并将系统调用号(4)放入eax中,然后执行历史上的“ENTER_KERNEL” “int $ 0x80”但现在是某种动态块中的代码片段。

然后内核负责其余部分。

答案 1 :(得分:0)

该声明由链接器处理,并且没有明显的方法来定位写入函数。您所能做的就是特别搜索功能的实现。这个主题可以帮助你: http://www.linuxforums.org/forum/kernel/6871-where-do-i-find-system-call-implementation-code.html