4


1

ご挨拶、SO。

私はgccを使ってコンパイルしようとしたコードをいくつか持っていますが、私の試みは阻止されました。 もっと精通している人なら誰でもこの話題を手伝ってもらえますか。

私はこのコードをLinux Kitchen 2.6.28-15-generic#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 ""プッシュ%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 ");

0を返します。 }

返されるエラーは次のとおりです。

$ gcc -oシェルコードshellcode.c shellcode.c:アセンブラメッセージ:shellcode.c:4:エラー:不正なレジスタ名 `%rdxmovq $ 0x68732f6e69622fff '

みんな、ありがとう。

1 Answer


9


引用符付きインラインアセンブリに改行( \ n)を入れる必要があります。 そうでなければ、それは考えている

xorq%rdx、%rdx movq $ 0x68732f6e69622fff、%rdx

本当に

xorq%rdx、%rdxmovq $ 0x68732f6e69622fff、%rdx

そのため、最初の2行(など)はこのようになります。

"xorq%rdx、%rdx \ n" "movq $ 0x68732f6e69622fff、%rdx \ n" "