Asm Programming Using Jmp/Call
Learn how to print "Hello, World!" in assembler on MacOS X using the jmp/call method to get a pointer to the string to print. Happy Hacking!
x86
# Hello World x86 asm - MacOS X
# By Erik Wrenholt
# gcc hello2.s -o hello2 ; ./hello2 ; echo $?
# References:
# http://www.klake.org/~jt/encoder/
.text
.globl _main
_main:
jmp _data
_syscall:
int $0x80
ret
_begin:
pop %ebx # get ptr of string
pushl $14 # pass the length of the string
pushl %ebx # pass the ptr to the hello string
pushl $1 # pass stdout (1)
movl $4, %eax # SYS_write (4)
call _syscall
add $12, %esp # clear stack (we pushed 3 args)
pushl $0 # we want to call exit(0), push 0
movl $1, %eax # SYS_exit=1
call _syscall
leave
ret
_data:
call _begin
.asciz "Hello, World!\n"
PPC
; By Erik Wrenholt
; This PPC example shows how to use the jmp/call
; method to obtain the ptr to the string.
;gcc hello4.s -o hello4 ; ./hello4
.globl _main
.text
_main:
bl _string ; branch to location of string
_resume:
li r3, 1 ; stdout
mflr r4 ; move from lr into r4
li r5, 14 ; string length
li r0, 4 ; SYS_write
sc ; write(stdout, string, len)
nop
li r3, 0 ;
li r0, 1 ; SYS_exit (r3)
sc
_string:
bl _resume ; go back to _resume
; the link register holds ptr to string below
.asciz "Hello, world!\n"
Comments
Leave a Comment
Show Comment Form
|