質問

ご挨拶、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"
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top