(包括MinGW)
整个字符串打印很容易,但是如何更改此代码以打印出每个字母:
global _main
extern _printf
section .const
hello db 'Hello'
section .text
_main:
push hello
call _printf
add esp,4
答案 0 :(得分:0)
首先,您使用printf
错了! printf
有一个格式参数,printf docs习惯于现在正确使用它,它会在以后减少错误/坏事。 Uncontrolled format string,How can a Format-String vulnerability be exploited?
如果您要阅读文档,它会显示格式说明符来显示字符而不是字符串,但是,嘿,可以在不进行研究或阅读文档的情况下提出问题。
global main
extern printf, exit
section .data
hello db 'Hello', 0
hello_Len equ $ - hello
fmtstr db "%s", 10, 0
fmtchr db "%c", 10, 0
section .text
main:
push hello
push fmtstr
call printf
add esp, 4 * 2
xor ebx, ebx
mov esi, hello
PrintHello:
movzx eax, byte [esi + ebx]
push eax
push fmtchr
call printf
add esp, 4 * 2
inc ebx
cmp ebx, hello_Len - 1
jne PrintHello
push 0
call exit