我正在阅读 ac 头文件并正在寻找特殊功能。我找到了带有extern
声明的函数,但我需要知道该函数的来源。考虑到包含目录由许多其他头文件组成,我如何找到该函数的相关文件?
详细地说,我在头文件中搜索写函数,unistd.h
这个头文件有很多包含的头文件,所以我很困惑写函数的定义在哪里。
既然您提到您在 Ubuntu 中,您应该查看 glibc 源代码。
通常,系统调用的 C 库实现是在汇编中(不是在 C 中)和一系列复杂的宏完成的,对于 x86 linux 架构,这些宏位于sysdeps/unix/sysv/linux/i386/sysdep 中。 h(在树的其他地方的各种其他文件中也有一些文件也称为 sysdep.h 和 sysdep.S) - 调用宏以实现 write syscall 的实际文件是在编译时生成的,其中包含几个文件:
一般来说,最终结果没什么可看的——它从堆栈中获取三个参数并将它们放入寄存器中,并将系统调用号 (4) 放入 eax,然后执行历史上为“int $0”的“ENTER_KERNEL” x80" 但现在是某种动态块中的代码片段。
然后内核负责其余的工作。
该声明由链接器处理,并且没有明显的方法可以仅知道这一点来定位写入函数。您所能做的就是特别搜索函数的实现。这个线程可以帮助你: http ://www.linuxforums.org/forum/kernel/6871-where-do-i-find-system-call-implementation-code.html