我使用的是 Ubuntu 22.04 x86_64 系统,内核版本 6.5.0-15-generic。 我当前的 GNU C 库版本是 2.35
我的问题的原因始于以下简单的 C 源文件:
#include <unistd.h>
int main( void ){
char* str = "Hello\n";
write(1,str,strlen(str));
return 0;
}
这里的目标是这个 write 系统调用,或者更准确地说是这个包装函数,它确保在某个时刻执行实际的 write 系统调用。
我决定下载 GNU C Library 2.35 源文件,以便我可以检查整个函数调用链,从程序中使用的 write 系统调用的定义一直到实际的纯汇编文件,这些文件使实际的sycall 写作指令。
我想指出,我不想为此目的使用调试器。我只想亲眼看到源文件。
问题
任何人都可以按顺序向我展示 GNU C Library 2.35 中的所有源文件及其位置,从我使用的写入函数定义一直到汇编文件,并简要解释一下该函数调用链中发生的情况?
GNU C 库仅使用纯汇编文件还是有时也使用一些直接嵌入 C 源文件中的 gcc 内联汇编?
我决定下载 GNU C Library 2.35 源文件,以便我 可以从定义中检查整个函数调用链 我的程序中使用的 write 系统调用全部归结为实际的 生成实际 sycall 指令的纯汇编文件 写作。
git clone git://sourceware.org/git/glibc.git
然后看到树枝
git branch -a
然后签出您想要的文件并开始浏览文件。