据我所知,x64
代码有两种可能的调用约定 -Microsoft x64
和AMD64
.
现在,gcc
可以使用参数启动,如果我们使用调用约定-mregparm=0
,这将不起作用。发生这种情况是因为约定要求对前 6 个变量使用寄存器(我不太确定为什么要这样做,但我怀疑它是由于可能存在堆栈安全问题而实现的)。AMD64
AMD64
所以,这里有一个问题:
在按照约定编译使用时是否有一些像这样的严格规则(强制寄存器使用)?而且,如果是,如何在不破坏兼容性的情况下绕过它们?gcc
Microsoft x64
ABI