 <p>For amd64, you need to use "syscall" - and use different registers - instead of "int 0x80":</p> <p><a href="http://cs.lmu.edu/~ray/notes/linuxsyscalls/">http://cs.lmu.edu/~ray/notes/linuxsyscalls/</a></p> <p><a href="http://blog.rchapman.org/post/36801038863/linux-system-call-table-for-x86-64">http://blog.rchapman.org/post/36801038863/linux-system-call-table-for-x86-64</a></p> <p><a href="http://crypto.stanford.edu/~blynn/rop/">http://crypto.stanford.edu/~blynn/rop/</a></p> <p>Here's a good example:</p> <p><a href="http://stackoverflow.com/questions/9506353/how-to-invoke-a-system-call-via-sysenter-in-inline-assembly-x86-amd64-linux">How to invoke a system call via sysenter in inline assembly (x86/amd64 linux)?</a></p> <pre><code>#include &lt;unistd.h&gt; int main(void) { const char hello[] = "Hello World!\n"; const size_t hello_size = sizeof(hello); ssize_t ret; asm volatile ( "movl $1, %%eax\n\t" "movl $1, %%edi\n\t" "movq %1, %%rsi\n\t" "movl %2, %%edx\n\t" "syscall" : "=a"(ret) : "g"(hello), "g"(hello_size) : "%rdi", "%rsi", "%rdx", "%rcx", "%r11" ); return 0; </code></pre>