如何迭代 x86 汇编中字符串的各个字符并打印它们?
global _main ; declare _main entry point
extern _printf ; extern method
section .data
string: db 'Iterate over this string #test', 0
character: db '_', 0
endStr: db 'Ended.', 0
section .text
_main:
lea eax, string ;load address of string to eax
loop:
mov cl, [eax] ; access [eax] in memory, save char to cl
test cl, cl ; check if zero terminator
jz end ; exit if 0
mov [character], cl ; write char to memory (character)
push character ; print character
call _printf
add esp, 4 ; clear stack
inc eax ; increment address
jmp loop ; loop again
end:
push endStr ; print 'Ended.'
call _printf
add esp, 4 ; clear stack
ret ; exit
我当前的程序在打印字符串的第一个字符“I”后崩溃。控制台没有输出错误。
感谢您提前提供的任何帮助。
如果您知道如何操作,请尝试使用调试器单步执行程序 推荐的调试器 Linux:gdb Windows:x64dbg
我认为问题是你试图清除堆栈,尽管我认为 printf 自己做到了这一点,这取决于架构师和一切 您可以尝试通过编译带有调试信息的 hello world 并反编译它来了解如何使用它