gcc / g ++是否有x64微软寄存器的调用约定?

时间:2016-01-28 04:39:09

标签: gcc assembly 64-bit calling-convention

我有几个x86和x64库,其中许多是汇编代码或没有可用的源代码,这些代码是为x86上的__cdecl堆栈约定和Microsoft的x64调用约定(RCX,RDX,R8, R9)在amd64上。它们从COFF32转换为ELF32和COFF64转换为ELF64,并使用gcc / g ++进行精细连接。 x86函数原型使用__attribute__((cdecl, regparm(0)))并且完美地工作。但是,默认情况下,Linux上的x64使用不同的x64调用约定(RDI,RSI,RDX,RCX,R8,R9)。我似乎无法找到如何告诉gcc / g ++使用Microsoft使用的备用x64调用约定?似乎只有两种不同的x64调用方法,我希望在gcc / g ++中存在类似__attribute__((regparm(msx64)))的东西。 gcc / g ++是否有能力支持备用调用约定?

TIA !!

1 个答案:

答案 0 :(得分:5)

正如Marc Glisee在评论中指出的那样。答案是__attribute__((ms_abi))

现在很棒。