我有一个.asm模块,我想在.c模块中使用它的过程。
因为我在使用MASM,所以我的代码看起来像:
SECTION .text
func PROC arg1: DWORD, arg2:DWORD
...
ret
ENDPROC
在.c模块中:
extern "C"{
void func (int arg1, int arg2);
}
现在我使用ubuntu并决定尝试NASM。
所以我有以下问题:既然nasm只是一个标签,我如何将参数传递给它呢?如何在NASM代码中使用.C模块中外部“C”下描述的变量?
我还听说,有一个关于使用stack向过程传递参数的约定。我能用一下这里吗?你能给我举几个例子吗?
最佳答案
有几点需要指出:
汇编程序通过寄存器传递参数
堆栈或两者的组合。检查你的站台。
要从C调用的汇编函数通常具有下划线前缀_
。您可以对要公开的每个函数执行以下操作:section .textglobal _func
_func:
; Do stuff
ret
或者通过nasm compile参数(它将对所有函数执行此操作)
--prefix _
最后,如果从C++程序调用的话,您只需要。
玩得高兴!
关于c - 将变量传递给nasm程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36244943/