Assembly Language For Mac

I’m away from my Linux box and want to do some assembly programming. Mac installs GCC with the developer tools, but there are enough differences that I haven’t bothered to work through them until now. Here’s a decent tutorial, although it focuses on PPC assembly and I’m using an Intel Mac. The thing that frightened me about the Mac assembler was the default output of gcc -S. There is some strange optimizations and flags in the resulting assembly code. The key, as the tutorial points out, is in the compiler options. Here’s what I used on the ubiquitous “Hello World” program:

gcc -S -fno-PIC -O2 -Wall -o hello.s hello.c

And here’s the assembly code it spit out:

   .ascii "Hello World!%d\12\0"
   .align 4,0x90

.globl _main
   pushl   %ebp
   movl    %esp, %ebp
   subl    $24, %esp
   movl    $12, 4(%esp)
   movl    $LC0, (%esp)
   call    _printf
   xorl    %eax, %eax

This is more familiar territory, the only differences being the .cstring directive instead of .section .text, the leading underscore on printf, and the .subsections_via_symbols directive. The general naming of sections is outlined on the Mac Assembler Reference, and the .subsections_via_symbols explanation is interesting. I’m already used to using many labels in my code; does this mean that the named sections would be ripped out because they are not “called” by any other code? I tested this out in the previous example, just adding a second call to _printf in a labelled section and the code worked just fine. It seems that labels don’t count, they have to be declared sections like .globl, .section or whatever. That seems fair, I haven’t yet made a habit of calling sections that are supposed to flow naturally into other sections. Maybe there is some instance where this might be a useful optimization? I will be looking into Position Independent Code(PIC) a bit more, it seems that it’s similar in theory to how the latest Linux kernel runs code at randomized memory locations to prevent hardcoded attacks, but I don’t know if that’s the extent of it.