I have the following x86-64 code, which I can run on OSX Yosemite:
global _main
extern _exit
extern _puts
DEFAULT REL
section .data
putsmsg: db \'Puts
Works for me on GNU/Linux, with yasm. (After removing the _
prefix from function names.)
$ yasm -felf64 puts.asm
$ gcc -o put puts.o
$ ./puts
Puts message...
That's with the 2nd db line still present:
another: db 0
There was another question about almost exactly this problem (a message not printing when there was more data following the string) on OS X, within the past couple weeks. The OP of that question found that yasm on OS X worked for him. Maybe there's a bug in nasm for OS X?
I eventually found the post I was talking about: Position Independent Code pointing to wrong address. See the discussion in comments on my answer. The OP found his code worked with yasm, but wasn't able to tell if there was a bug in nasm or if he was just using it wrong.