首页 > 解决方案 > C 调用约定/参数传递

问题描述

我看过的所有地方(“从头开始编程”,Wikipedia x86 Calling Convention,...),都说 C 通过堆栈传递参数。然而,在下面的 C 代码中

int func(int);

int main() {
    func(5);
    return 0;
}

int func(int a) {
    return a;
}

参数 a 通过寄存器 %edi 传递(用于gcc -S ex.c在 Ubuntu 64 位机器上编译)。我传递了更多参数,调用者只是使用更多寄存器来传递值。

这正常吗?我访问的在线资源是否已经过时?

提前致谢。

标签: cassembly

解决方案


推荐阅读