Problema NASM en OSX de 64 bits

Estoy aprendiendo ASM y tengo un pequeño problema. No puedo “declarar” más de una cadena en “section.data”. Estoy intentando algo como esto:

section .data string1 db "test1 ", 0; string2 db "test2 ", 0; section .text global _test extern _puts _test: lea rdi, [rel string1] call _puts lea rdi, [rel string2] call _puts ret 

Se supone que esta función imprime “test1 test2” en STDOUT, pero no funciona. El resultado es:

 test2 

¡Solo funciona para la última cadena almacenada! Si alguien sabe por qué, ¡por favor dígame!

Si está utilizando nasm 2.11.08, aquí hay un problema documentado relacionado con el direccionamiento relativo combinado con entradas múltiples en la sección de datos.

Puedes hacer una (o ambas) dos cosas para estar seguro.

En primer lugar, puede echar un vistazo al código ensamblador generado para investigar qué está produciendo realmente . Esa es probablemente la opción definitiva, ya que entonces puede ver exactamente qué ejecutará la CPU.

En segundo lugar, puede probar su código con un lanzamiento anterior de nasm para ver si el problema desaparece. Si es así, eso es evidencia indirecta de que es el error en 2.11.08 lo que causa sus problemas.