为什么在x86中调用printf时会出现分段错误?

时间:2015-04-04 15:41:03

标签: assembly x86 segmentation-fault printf

我试图通过char打印字符串char,通过汇编代码调用printf,但是在打印完第一个字符后我得到了分段错误,我无法理解为什么会发生这种情况, ,有人可以帮忙吗?

section .rodata
lc:
    DB  "%c", 10, 0

section .text
    align 16
    global my_func
    extern printf

my_func:
    push    ebp
    mov ebp, esp    ; Entry code - set up ebp and esp
    pusha           ; Save registers

    mov ecx, dword [ebp+8]  ; Get argument (pointer to string)

incr:   
    cmp byte [ecx], 0
    jz end

    movzx eax, byte [ecx]
    push eax
    push lc
    call printf
    add esp, 8

    inc ecx
    jmp incr

end:    
    popa            ; Restore registers
    mov esp, ebp    ; Function exit code
    pop ebp
    ret

1 个答案:

答案 0 :(得分:0)

我假设您在C运行时调用printf。我不认为C函数需要在调用之间保留寄存器的值,因此ECX可能会被调用破坏。