我有一个 .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 模块中 extern "C"下描述的变量?
我还听说,有一个关于使用堆栈将参数传递给过程的约定。我可以在这里使用吗?请给我一些例子好吗?
最佳答案
有两点需要指出:
- 你的汇编程序通过寄存器传递参数, 堆栈或两者的组合。检查您的平台 ABI。
- 您要从 C 调用的汇编程序函数通常有一个下划线前缀
_
。您可以为要公开的每个功能执行此操作:
节.text
全局_func
_func:
; Do stuff
ret
或者通过 nasm 编译参数(它将对所有函数执行)--prefix _
- 最后,如果从 C++ 程序调用,您只需要
extern "C"
。
玩得开心!
关于c - 将变量传递给 nasm 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36244943/