等效GCC-用于Clang的mpush参数标志

等效GCC-用于Clang的mpush参数标志,gcc,stack,clang,cpu-registers,Gcc,Stack,Clang,Cpu Registers,我试图从某个x86程序集调用一个C函数。C代码是用叮当声编译的: Apple clang version 12.0.0 (clang-1200.0.32.2) Target: x86_64-apple-darwin19.6.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin 我依赖于将函数参数推送到堆栈上进行调用,但clang似乎不直接允许函数接受堆栈中的参数。相反,它混合使用堆栈偏移和

我试图从某个x86程序集调用一个C函数。C代码是用叮当声编译的:

Apple clang version 12.0.0 (clang-1200.0.32.2)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
我依赖于将函数参数推送到堆栈上进行调用,但clang似乎不直接允许函数接受堆栈中的参数。相反,它混合使用堆栈偏移和寄存器移动来操作参数。对于GCC,有一个标志
-mpush args
,它允许您通过堆栈提供参数,而无需其他。因为我在使用Clang,所以此标志不可用。我已经做了大约一个小时的研究,以找到一个相当于叮当的旗帜,但我还没有找到一个。有人知道是否有一个相当于“叮当”的旗子吗

以下是我对代码的参数:
-mstackreallign-fverbose asm-S-masm=intel-O0

当你说“x86汇编”时,我猜你的意思是x86_64。当世界移动到64位时,设计师们努力使调用约定标准化(但Windows和Linux仍然采用了两种不同的方式)。试图强制您的C代码违反该约定是可能的,但您确定要这样做吗?看来你只是在为将来的悲伤做准备。如果不可能重新使用asm,那么将
void*
传递到堆栈怎么样?只接受1个寄存器,堆栈不变。调用一个c包装器,你就可以调用原始的func了。@DavidWohlferd我来试试。当你说“x86汇编”时,我猜你的意思是x86_64。当世界移动到64位时,设计师们努力使调用约定标准化(但Windows和Linux仍然采用了两种不同的方式)。试图强制您的C代码违反该约定是可能的,但您确定要这样做吗?看来你只是在为将来的悲伤做准备。如果不可能重新使用asm,那么将
void*
传递到堆栈怎么样?只接受1个寄存器,堆栈不变。调用一个c包装器,您可以通过一些工作调用原始的func。@DavidWohlferd我会试试看。