assembly language in os x

后端 未结 3 1041
轮回少年
轮回少年 2021-01-05 09:06

I used assembly language step by step to learn assembly language programming on linux. I recently got a Mac, on which int 0x80 doesn\'t seem to work (illegal in

3条回答
  •  别那么骄傲
    2021-01-05 09:25

    For practical purposes, this answer shows how to compile a hello world application using nasm on OSX.

    This code can be compiled for linux as is, but the cmd-line command to compile it would probably differ:

    section .text
    
    global mystart                ; make the main function externally visible
    
    mystart:
    
    ; 1 print "hello, world"
    
        ; 1a prepare the arguments for the system call to write
        push dword mylen          ; message length                           
        push dword mymsg          ; message to write
        push dword 1              ; file descriptor value
    
        ; 1b make the system call to write
        mov eax, 0x4              ; system call number for write
        sub esp, 4                ; OS X (and BSD) system calls needs "extra space" on stack
        int 0x80                  ; make the actual system call
    
        ; 1c clean up the stack
        add esp, 16               ; 3 args * 4 bytes/arg + 4 bytes extra space = 16 bytes
    
    ; 2 exit the program
    
        ; 2a prepare the argument for the sys call to exit
        push dword 0              ; exit status returned to the operating system
    
        ; 2b make the call to sys call to exit
        mov eax, 0x1              ; system call number for exit
        sub esp, 4                ; OS X (and BSD) system calls needs "extra space" on stack
        int 0x80                  ; make the system call
    
        ; 2c no need to clean up the stack because no code here would executed: already exited
    
    section .data
    
      mymsg db "hello, world", 0xa  ; string with a carriage-return
      mylen equ $-mymsg             ; string length in bytes
    

    Assemble the source (hello.nasm) to an object file:

    nasm -f macho hello.nasm
    

    Link to produce the executable:

    ld -o hello -e mystart hello.o
    

提交回复
热议问题