extern int main(int argc, char *argv[]); __attribute__((naked)) void _start(void) { __asm__ volatile( "xor %%rbp, %%rbp \n" "pop %%rdi \n" // rdi = argc "mov %%rsp, %%rsi \n" // rsi = argv "and $-16, %%rsp \n" // 16-byte align stack "call main \n" "mov %%rax, %%rdi \n" // exit code = return value of main() "mov $231, %%rax \n" // SYS_exit_group "syscall \n" :: : "memory"); }