GNU C 库汇编系统调用源文件位置

问题描述 投票:0回答:1

我使用的是 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 写作指令。

我想指出,我不想为此目的使用调试器。我只想亲眼看到源文件。

问题

  1. 任何人都可以按顺序向我展示 GNU C Library 2.35 中的所有源文件及其位置,从我使用的写入函数定义一直到汇编文件,并简要解释一下该函数调用链中发生的情况?

  2. 中声明的printf函数呢?

  3. GNU C 库仅使用纯汇编文件还是有时也使用一些直接嵌入 C 源文件中的 gcc 内联汇编?

c linux assembly system-calls glibc
1个回答
0
投票

我决定下载 GNU C Library 2.35 源文件,以便我 可以从定义中检查整个函数调用链 我的程序中使用的 write 系统调用全部归结为实际的 生成实际 sycall 指令的纯汇编文件 写作。

git clone git://sourceware.org/git/glibc.git

然后看到树枝

git branch -a

然后签出您想要的文件并开始浏览文件。

© www.soinside.com 2019 - 2024. All rights reserved.