Почему я получаю этот результат из 32-битного кода сборки NASM? - PullRequest
0 голосов
/ 23 сентября 2018

Мой код сборки NASM (в Linux) выглядит следующим образом:

   %macro write_string 2
    push %1
    call printf
    pop eax
    add esp, %2
    %endmacro
section .text
   global main            ;must be declared for using gcc
   extern printf
main:
   push ebp
   mov ebp, esp
   write_string msg1, len1
   write_string msg2, len2
   write_string msg3, len3
   mov esp, ebp
   pop ebp

 mov eax,1                ;system call number (sys_exit)
  int 0x80                 ;call kernel

section .data
msg1  db 'Hello, programmers!',0xA,0xD
len1  equ $ - msg1
msg2  db 'Welcome to the world of,', 0xA,0xD
len2  equ $- msg2
msg3  db 'Linux assembly programming! '
len3  equ $- msg3

Когда это выполняется (после nasm -f elf -o writeStrings.o writeStrings.asm && gcc -o writeStrings writeStrings.o), Я получаю следующий вывод:

Hello, programmers! Welcome to the world of, Linux assembly
programming! Welcome to the world of,

Может кто-нибудь сказать мне, почему «Добро пожаловать в мир» дублируется?

Любая помощь будетБудьте благодарны!

Обновление: После добавления 0x00 после каждого сообщения, теперь вывод: Привет, программисты!Добро пожаловать в мир,

Третий отпечаток не выводится сейчас.

Обновление: Мне удалось заставить его работать.Большое спасибо за вашу помощь!

...