私の知る限り、x64
コードMicrosoft x64
には と の 2 つの呼び出し規則が考えられAMD64
ます。
これでgcc
、パラメーターを使用して起動できますが、呼び出し規約-mregparm=0
を使用している場合は機能しません。これは、規約で最初の 6 つの変数にレジスタを使用することが義務付けられているために発生します(これが行われる理由はよくわかりませんが、セキュリティの問題がスタックする可能性があるため実装されていると思われます)。AMD64
AMD64
それで、ここに質問があります:
規約の下で使用してコンパイルするときに、このようないくつかの厳密な規則(レジスタの使用を強制する)はありますか? はいの場合、互換性を壊さずにバイパスするにはどうすればよいですか?gcc
Microsoft x64
ABI