首页 > 解决方案 > 什么是 C 调用约定标准?

问题描述

我正在编写一个编译器,我正在尝试实现一个 C 接口。于是,我写了一个简单的 C 程序,看到了 GCC 生成的汇编代码:

    ...

    mov rdi, rax
    call    puts@PL

    ....

我期待 C 通过堆栈传递参数puts,但它使用di寄存器来这样做。我测试了其他libc的函数,比如sleepand calloc,它们也都使用寄存器。

那么,有这种模式吗?ie alllibc的函数是否接收系统调用之类的参数?而且,C 在哪里使用堆栈作为函数参数?它仅适用于用户定义的功能吗?

标签: clinuxx86system-callscalling-convention

解决方案


推荐阅读