从汇编调用printf - 不工作

时间:2014-09-11 19:51:15

标签: c assembly

嗯..我已经尝试过一些事情,但我无法解决这个问题。

如何正确推送_hello功能的printf()地址?

.intel_syntax noprefix

.extern printf

.global printf2

_hello: .ascii  "Hello World!\0"

printf2:
    push ebp
    mov ebp, esp

    push _hello
    call _printf

    pop ebp
    ret

" 无效"我的意思是该程序只是崩溃。

1 个答案:

答案 0 :(得分:2)

我无法识别您使用的操作系统。

对于适用于Windows的MinGW-GAS,这是正确的:

.intel_syntax noprefix

.extern _printf
.global _printf2

_hello: .ascii  "Hello World!\0"

_printf2:
    push ebp
    mov ebp, esp

    push OFFSET _hello
    call _printf
    add esp, 4

    pop ebp
    ret

这个适用于Linux-GAS:

.intel_syntax noprefix

.extern printf
.global printf2

_hello: .ascii  "Hello World!\0"

printf2:
    push ebp
    mov ebp, esp

    push OFFSET _hello
    call printf
    add esp, 4

    pop ebp
    ret

考虑下划线的不同用法!