将参数从C传递给汇编?

Moh*_*nde 2 c assembly cdecl

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

void function(char *somedata) __attribute__((cdecl));
Run Code Online (Sandbox Code Playgroud)

现在我将如何somedata在程序集文件中使用.我的操作系统是Linux Ubuntu,我的处理器是x86.

jww*_*art 13

我在这方面有点像菜鸟,但希望这个例子可以帮助你.我已经对它进行了测试并且它可以正常工作,唯一的问题就是软件无法使用.我正在使用nasm进行组装.

main.c中

extern void myFunc(char * somedata);

void main(){
    myFunc("Hello World");
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

COMPILE

nasm -f elf myFunc.asm
gcc main.c myFunc.o -o main
Run Code Online (Sandbox Code Playgroud)

笔记:

你需要安装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声明为extrnal函数.在myFunc.asm中,我们还从stdlib导入printf函数,以便我们可以尽可能简单地输出消息.

希望这有点帮助.

  • @jwwishart你现在有1337的声望.如果有人投票给你,那将是一种耻辱,不是吗?^^ (2认同)