在汇编程序(NASM)中逐字母打印字符串

时间:2013-12-27 21:25:54

标签: assembly nasm

(包括MinGW)

整个字符串打印很容易,但是如何更改此代码以打印出每个字母:

global  _main     
extern  _printf  

section .const
  hello db 'Hello'
section .text

_main:
    push    hello     
    call    _printf
    add esp,4

1 个答案:

答案 0 :(得分:0)

首先,您使用printf错了! printf有一个格式参数,printf docs习惯于现在正确使用它,它会在以后减少错误/坏事。 Uncontrolled format stringHow 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