2010-12-02 59 views
2

如何将C main函数的参数传递给汇编函数?我知道我的自定义函数必须看起来像:将参数从C传递给程序集?

void function(char *somedata) __attribute__((cdecl)); 

现在我将如何在装配文件中使用somedata。我的操作系统是Linux Ubuntu,我的处理器是x86。

回答

12

我在这里有点小事,但希望这个例子能让你顺利。我已经测试过它,它的工作原理,唯一的问题是软件不可用。我正在使用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 

COMPILE

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函数,以便我们可以输出消息为尽可能简单

希望这会有所帮助

+0

正是我在找什么。 – 2010-12-05 02:49:46