linux - Linux 中这是什么调用约定?

标签 linux gcc

我在用这个程序集调用的程序中有一个函数:

push xxx
push xxx
call xxx
add esp, xxx

据我所知,此函数具有 cdecl 调用约定。 在 GCC 中,我使用 __attribute__((cdecl)) 使另一个函数的行为与上述函数相同。

但是当我调试它时,显示了这个程序集:

push xxx
push xxx
call xxx

没有add esp, xxx!

我应该使用什么调用约定来生成相同的程序集?

最佳答案

我怀疑这与调用约定有任何关系,更可能与编译器优化有关,如“defer-pop”(编译器将等待弹出堆栈,直到稍后)

关于linux - Linux 中这是什么调用约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8765344/

相关文章:

linux - mq_send 是原子的吗?

为进程创建 n 个子进程

python - C++ Python 模块未使用 g++ 链接到 Python

c - 我怎么知道 gcc 是否同意某些东西是易变的?

c++ - 如何在编译时输出结构中成员的偏移量(C/C++)

c - 一个 strcpy gcc 内联汇编代码

linux - sed 命令查找特定单词

c# - 未找到框架 ".NETFramework,Version=v4.7.1"的引用程序集

windows - 将 X11 显示转发到 Windows 时出现颜色问题

c++ - 目标代码重定位和 Intel Pin 交互