c - c中外部函数的来源

标签 c header

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

详细来说,我在unistd.h头文件中搜索写入函数,并且该头文件有许多包含的头文件,所以我很困惑写入函数的定义在哪里。

最佳答案

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

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

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

然后内核会处理剩下的事情。

关于c - c中外部函数的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19914553/

相关文章:

c - 下面的c代码会产生内存泄漏吗?

c++ - 修改 dll-s 的 header

html - 创建不透明度标题

header - 将值追加到beresp中的set-cookie header 中。在Varnish 2.1中

c - 如何读取文件行(整​​数)并对从 A 行到 B 行的总数求和?

c++ - Int vs Double 汇编

c - 汇编中的子程序

css - jQtouch CSS 标题栏

c++ - 创建一个 OS C++ 特定的 API

C - 父进程无限期地等待运行 authopen 的 fork 子进程