我试图通过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
答案 0 :(得分:0)
我假设您在C运行时调用printf
。我不认为C函数需要在调用之间保留寄存器的值,因此ECX可能会被调用破坏。