main: push fp mov fp, sp sub sp, 0x1000 mov r3, 0 mov r2, 1 mov r1, 2 mov r0, 5 syscall mov r6, r0 ; fd = socket(2,1,0); mov r1, r6 mov r0, 7 mov r2, 0x200d ; &server_addr mov r3, 16 syscall ; bind mov r0, 8 mov r1, r6 mov r2, 20 syscall ; listen _infinite_loop: mov r0, 6 mov r1, r6 mov r2, 0 mov r3, 0 syscall ; accept mov r7, r0 mov r0, 9 syscall ; fork cmp r0, 0 je _child jne _parent _child: mov r0, 2 mov r1, r6 syscall call handle mov r0, 2 mov r1, r7 mov r0, 0 mov r1, 0 syscall _parent: mov r0, 2 mov r1, r7 syscall jmp _infinite_loop mov sp, fp pop fp ret memset: push fp mov fp, sp push r0 push r1 push r2 mov r0, fp mov r1, r0 mov r2, r0 add r0, 8 add r1, 0xc add r2, 0x10 mov r0, (r0) mov r1, (r1) mov r2, (r2) _memset_loop: mov (r0), r1 sub r2, 1 cmp r2, 0 jne _memset_loop pop r2 pop r1 pop r0 pop fp ret handle: push fp mov fp, sp sub sp, 0x100 mov r0, fp sub r0, 8 mov (r0), canary call greet mov r0, 3 mov r1, r7 mov r2, fp sub r2, 0x100 mov r3, 4096 syscall mov r0, 4 mov r1, r7 mov r2, fp sub r2, 0x100 mov r3, 4096 syscall mov r0, fp sub r0, 8 mov r0, (r0) xor r0, canary cmp r0, 0 mov sp, fp je _good mov r0, 0 syscall _good: pop fp ret greet: push fp mov fp, sp push r0 push r1 push r2 push r3 push r4 sub sp, 0x90c mov r1, fp sub r1, 0x904 mov r5, r1 push 0x8f8 push 0 push r1 call memset add sp, 12 mov r0, 1 mov r1, 0x2000 mov r2, 0 syscall mov r4, r0 mov r1, r0 mov r0, 3 mov r2, r5 mov r3, 2296 syscall mov r0, 2 syscall mov r1, r7 mov r2, r5 mov r3, 2296 mov r0, 4 syscall mov r0, 4 mov r1, r7 mov r2, 0x201d ;will you escape from this virtual reality mov r3, 43 syscall mov r0, 4 mov r2, 0x2048; or will you control this world mov r3, 32 syscall mov r0, 4 mov r2, 0x2068 ; choice is yours. good luck mov r3, 28 syscall mov r0, 4 mov r2, 0x2084 ; choice> mov r3, 8 syscall add sp, 0x90c pop r4 pop r3 pop r2 pop r1 pop r0 pop fp ret