.globl _start .data msg: .ascii "Meow!\n" badmsg: .ascii "syscall failed\n" .text _start: # x32 mov $0x40000001, %rax # syscall: write mov $1, %rdi mov $msg, %rsi mov $6, %rdx syscall # amd64 mov $1, %rax # syscall: write mov $1, %rdi mov $msg, %rsi mov $6, %rdx syscall # i386 mov $4, %eax # syscall: write mov $1, %ebx mov $msg, %ecx mov $6, %edx int $0x80 # x32 mov $0x40000009, %rax # syscall: mmap mov $0, %rdi mov $0x10000, %rsi mov $3, %rdx # PROT_READ|PROT_WRITE mov $0x62, %r10 # MAP_PRIVATE|MAP_ANON|MAP_32BIT mov $-1, %r8 mov $0, %r9 syscall or %rax, %rax js badness # amd64 mov $0x9, %rax # syscall: mmap mov $0, %rdi mov $0x10000, %rsi mov $3, %rdx # PROT_READ|PROT_WRITE mov $0x62, %r10 # MAP_PRIVATE|MAP_ANON|MAP_32BIT mov $-1, %r8 mov $0, %r9 syscall or %rax, %rax js badness jmp goodbye # m'kay, this one doesn't work, no regression # i386 mov $0x90, %eax # syscall: mmap mov $0, %ebx mov $0x10000, %ecx mov $3, %edx # PROT_READ|PROT_WRITE mov $0x62, %esi # MAP_PRIVATE|MAP_ANON|MAP_32BIT mov $-1, %edi mov $0, %ebp int $0x80 movslq %eax, %rax or %rax, %rax js badness goodbye: mov $0x4000003c, %rax # syscall: _exit xor %rdi, %rdi syscall badness: # I'm too lazy to printf this as a number... push %rax mov $0x40000001, %rax # syscall: write mov $1, %rdi mov $badmsg, %rsi mov $15, %rdx syscall mov $0x4000003c, %rax # syscall: _exit pop %rdi syscall