4 x86 assembly gcc x86-64 inline-assembly
问候,SO.
我有一些代码,我尝试使用gcc编译,但我的尝试被挫败了.任何更精通的人都可以帮助我解决这个问题,或许有一些我不知道的事情.
我正在Linux Kitchen 2.6.28-15上编译此代码 - 通用#49-Ubuntu SMP Tue Aug 18 19:25:34 UTC 2009 x86_64 GNU/Linux.
int
main(void)
{
__asm__(
"xorq %rdx,%rdx"
"movq $0x68732f6e69622fff, %rdx"
"shr $0x8, %rbx"
"push %rbx"
"movq %rsp,%rdi"
"xorq %rax,%rax"
"pushq %rax"
"pushq %rdi"
"movq %rsp,%rsi"
"mov $0x3b, %al"
"syscall"
"pushq $0x1"
"pop %rdi"
"pushq $0x3c"
"pop %rax"
"syscall"
);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
返回的错误是:
$ gcc -o shellcode shellcode.c
shellcode.c: Assembler messages:
shellcode.c:4: Error: bad register name `%rdxmovq $0x68732f6e69622fff'
Run Code Online (Sandbox Code Playgroud)
感谢大家.
您需要将newlines(\n)放入引用的内联汇编中.否则,它认为
xorq %rdx,%rdx
movq $0x68732f6e69622fff, %rdx
Run Code Online (Sandbox Code Playgroud)
是真的
xorq %rdx,%rdxmovq $0x68732f6e69622fff, %rdx
Run Code Online (Sandbox Code Playgroud)
所以前两行(依此类推)应该更像这样:
"xorq %rdx,%rdx\n"
"movq $0x68732f6e69622fff, %rdx\n"
Run Code Online (Sandbox Code Playgroud)