x86_64.s (1805B)
1 # Syscall numbers https://www.chromium.org/chromium-os/developer-library/reference/linux-constants/syscalls/#x86_64-64-bit 2 3 .intel_syntax noprefix 4 5 .global start 6 7 .text 8 9 start: # start is the entry point known to the linker 10 mov edi, [rsp] # get argc from the stack 11 lea rsi, [rsp+8] # take the address of argv from the stack 12 lea rdx, [rsp+16] # take the address of envp from the stack 13 call main # %edi, %rsi, %rdx are the three args (of which first two are C standard) to main 14 mov rdi, rax 15 jmp exit 16 17 .macro extern_alias, name 18 .global \name 19 \name: 20 .endm 21 22 .macro extern, name 23 .section .text.\name 24 extern_alias \name 25 .endm 26 27 .macro _syscall, num, impl 28 mov rax, \num 29 jmp \impl 30 .endm 31 32 .section .text.syscall3 33 syscall3: 34 push r11 35 push rcx 36 syscall 37 pop rcx 38 pop r11 39 ret 40 41 .section .text.syscall6 42 syscall6: 43 push r11 44 mov r10, rcx 45 syscall 46 pop r11 47 ret 48 49 extern read 50 extern_alias _Z4read4filePcm 51 extern_alias _Z4read4file4spanIcE 52 _syscall 0 syscall3 53 54 extern write 55 extern_alias _Z5write4filePKcm 56 extern_alias _Z5write4file4spanIKcE 57 _syscall 1 syscall3 58 59 extern close 60 extern_alias _Z5close4file 61 _syscall 3 syscall3 62 63 extern mmap 64 extern_alias _Z4mmapPvmmm4filem 65 _syscall 9 syscall6 66 67 extern munmap 68 extern_alias _Z6munmapPvm 69 _syscall 11 syscall3 70 71 extern writev 72 extern_alias _Z5write4file4spanIKS0_IKcEE 73 _syscall 20 syscall3 74 75 extern nanosleep 76 extern_alias _Z9nanosleepRK8timespecPS_ 77 _syscall 35 syscall3 78 79 extern exit 80 extern_alias _Z4exiti 81 _syscall 60 syscall3 82 83 extern getdents64 84 extern_alias _Z10getdents644fileP14linux_dirent64m 85 _syscall 217 syscall3 86 87 extern openat 88 extern_alias _Z6openat4file5c_strii 89 _syscall 257 syscall6 90 91 extern unlinkat 92 extern_alias _Z8unlinkat4file5c_str12unlink_flags 93 _syscall 263 syscall3 94 95 extern renameat 96 extern_alias _Z9renameat24file5c_strS_S0_12rename_flags 97 _syscall 316 syscall6