インライン組立誤差、gccのコンパイルの試みを阻止
-
20-09-2019 - |
質問
ご挨拶、SO。
私はgccを使用してコンパイルする試みがなされてきましたが、私の試みは阻止されているいくつかのコードを持っています。誰もがより多くの経験済み主題で私を助けることができ、おそらく私が欠けている何かがあります。
私はLinuxのキッチン2.6.28-15-一般的な#49-UbuntuのSMP火8月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;
}
返されるエラーは、次のとおりです。
$ gcc -o shellcode shellcode.c
shellcode.c: Assembler messages:
shellcode.c:4: Error: bad register name `%rdxmovq $0x68732f6e69622fff'
おかげで、みんなます。
解決
あなたが引用されたインラインアセンブリ内に改行(\n
)を配置する必要があります。そうでなければ、それはと思う。
xorq %rdx,%rdx
movq $0x68732f6e69622fff, %rdx
本当に
xorq %rdx,%rdxmovq $0x68732f6e69622fff, %rdx
最初の2行(など)がすることは、よりこのようにする必要があります:
"xorq %rdx,%rdx\n"
"movq $0x68732f6e69622fff, %rdx\n"
所属していません StackOverflow