如何将参数从C main函数传递给汇编函数?我知道我的自定义函数必须看起来像:
void function(char *somedata) __attribute__((cdecl));
现在我将如何在汇编文件中使用
somedata
。我的操作系统是Linux Ubuntu,处理器是x86。 最佳答案
我对此不太满意,但希望本示例可以助您一臂之力。我已经对其进行了测试,并且可以正常工作,唯一的问题就是软件不可用。我正在使用nasm进行组装。
main.c
extern void myFunc(char * somedata);
void main(){
myFunc("Hello World");
}
myFunc.asm
section .text
global myFunc
extern printf
myFunc:
push ebp
mov ebp, esp
push dword [ebp+8]
call printf
mov esp, ebp
pop ebp
ret
编译
nasm -f elf myFunc.asm
gcc main.c myFunc.o -o main
笔记:
您需要安装nasm(汇编程序)(ubuntu是:sudo apt-get install nasm)
C代码中基本上发生的事情是通过消息调用myFunc。在myFunc.asm中,我们获得字符串的第一个字符的地址(在[ebp + 8]中,有关信息,请参见此处(http://www.nasm.us/xdoc/2.09.04/html/nasmdoc9.html参见9.1.2,它在某种程度上描述了c调用约定。),并将其传递给printf函数(通过将其压入堆栈)。printf在c标准库中,默认情况下,gcc会自动链接到我们的代码中,除非我们不说至。
我们必须将myFunc导出到程序集文件中,并在main.c文件中将myFunc声明为外部函数。在myFunc.asm中,我们还从stdlib导入了printf函数,以便我们可以尽可能简单地输出消息。
希望这会有所帮助。