简体   繁体   中英

Printing out Twice NASM

My question: Why is it printing twice when I'm making one call to printf? Note that yes, I'm aware I'm allocating space in heap for a variable stored on the stack. I'm only doing this to get used to malloc, pointers, and 'arrays' in NASM.

Compiling in x64 bit machine with:
nasm -f elf32 -o TEMP.o file.asm
and:
gcc -m32 -o exec TEMP.o

extern exit, printf, malloc, free
global main

section .data
format  db  "%s", 10
msg:    db "Hello!!",10
BUF equ $-msg + 1

section .text
main:
    push BUF    ; How many bytes do we want to allocate
    call malloc ; ptr stored in EAX
    add esp, 4  ; clear the last thing on the stack (BUF)
    mov esi, eax    ; new source index at malloc pointer
    xor ecx, ecx    ; clear ECX (counter for us)
loop:
    mov dl, [msg+ecx]   ; mov letter into dl
    mov BYTE [esi+ecx], dl  ; cat dl onto array
    inc ecx         ; add 1 to our ounter
    cmp ecx, BUF-1d
    jl loop

    xor edx, edx
    mov BYTE [esi+ecx], dl
    add esp, 4
    mov esi, eax
    push esi    ;
    push format
    call printf
    add esp, 4*2
    push esi
    call free

    push 0
    call exit
    add esp, 4

You only need to end your strings with 0

format  db  "%s", 10, 0
msg:    db "Hello!!",10 ,0

Okay i'v read the comments just now and see you said you had code that is meant to insert the 0 s, i'd check that, because i copied/pasted your code and only added the 0 s on the ends of the strings to make it output one string, i didn't even notice the insertion code let alone touch it, but i can only assume that is where your problem is.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM