当前位置: 首页 > 知识库问答 >
问题:

其中寄存器是在cppx86_64arch(mac os)中传递的函数参数[重复]

宗冠宇
2023-03-14

我目前正在读一本关于x86_64 arch的汇编的书。我使用的是extern“c”,因此我从cpp调用程序集。这家伙正在visual studio中编码,他说cpp正在eax、edx、R8D和R9D寄存器中加载函数的参数。这就是我正在研究的功能

extern “C” integer_add(int a, int b, int c, int d);
// some movs, adds and subs go on in the assembly instructions

我的问题是:我可以假设cpp加载这些寄存器中的参数吗?他正在使用MASM,我认为这是针对Windows的(到目前为止,我已经使用过NASM,我在Mac上以防万一它意味着什么),如果没有,我怎么知道在哪里可以找到我的参数。从技术上讲,来自更高级的语言,我想所有这些都应该在堆栈中发生,但他似乎没有推动或弹出任何东西。这是我在维基百科上发现的 RDI,RSI,RDX,RCX,R8,R9,[XYZ]MM0–7,所以这些似乎是gcc,Intel C Linux和MACOS使用的寄存器。顺序是否重要,因此第一个参数加载到 rdi 中,第二个参数加载到 rsi 中,依此类推...?感谢您的帮助

共有1个答案

淳于典
2023-03-14

MacOSX遵循系统V ABI。这不同于Visual Studio/Windows。

如果有可用的寄存器,则绝对不会在堆栈上传递参数。你是对的,SystemV ABI使用RDI,RSI,RDX,RCX作为你的4个参数 - 我们可以再安装2个。顺序当然很重要;呼叫者和被调用方需要同意。

 类似资料:
  • 我想编写一个函数,它可以执行以下操作: 我知道已经有了这样的说明,但我正在练习如何在函数中传递args。传递args的正确方法是什么?我见过类似的东西: 这是传递args的正确方法吗,以相反的顺序将它们推送到,然后在执行函数调用后重置堆栈指针?我还听说参数在中传递。一个正确,另一个不正确,或者正确的方法是什么?

  • 问题内容: 请告知如何将参数传递给使用的函数。 我的例子是不正确的。 问题答案: 您需要创建一个匿名函数,以便不会立即执行实际函数。

  • 本文向大家介绍如何在PowerShell函数中传递参数?,包括了如何在PowerShell函数中传递参数?的使用技巧和注意事项,需要的朋友参考一下 您可以在PowerShell函数中传递参数,并且要捕获这些参数,需要使用参数。通常,当您在函数外部使用变量时,您实际上不需要传递参数,因为变量本身是Public,可以在函数内部访问。但是在某些情况下,我们需要将参数传递给函数,下面的示例说明了如何编写该

  • 我有一个功能:

  • 在Python中,我可以很容易地将函数作为参数传递,并在另一个函数内部执行。

  • 本文向大家介绍浅谈Python中函数的参数传递,包括了浅谈Python中函数的参数传递的使用技巧和注意事项,需要的朋友参考一下 1.普通的参数传递 2.参数个数可选,参数有默认值的传递 参数sep的缺省值是'_' 如果这个参数不给定值就会使用缺省值 如果给定 则使用给定的值 需要注意 如果一个参数是可选参数 那么它后面所有的参数都应该是可选的,另外 可选参数的顺序颠倒依然可以正确的给对应的参数赋值