3

シェルコードを実行しようとしていますが、実行に問題があります。(x86 32bit CPUを使用しています)

char shellcode[] =
                                      // <_start>
          "\x31\xc9"                  // xor    %ecx,%ecx
          "\xf7\xe1"                  // mul    %ecx
          "\x51"                      // push   %ecx
          "\x68\x2f\x2f\x73\x68"      // push   $0x68732f2f
          "\x68\x2f\x62\x69\x6e"      // push   $0x6e69622f
          "\x89\xe3"                  // mov    %esp,%ebx
          "\xb0\x0b"                  // mov    $0xb,%al
          "\xcd\x80"                  // int    $0x80

上記コードはこちらから

これをgdbデバッガーでデバッグすると、アドレス付きのアセンブリコードが次のように表示されます

0xbffff6e6: xor    %ecx,%ecx
0xbffff6e8: mul    %ecx
0xbffff6ea: push   %ecx
0xbffff6eb: push   $0x68732f2f
0xbffff6f0: push   $0x6e69622f
0xbffff6f5: mov    %esp,%ebx
0xbffff6f7: mov    $0xb,%al
0xbffff6f9: int    $0x80
0xbffff6fb: add    %al,(%eax)
0xbffff6fd: jmp    0xbffff727

問題は... 0xbffff6e6 で中断すると、次の命令を実行できません。続行すると mul %ecx になります。gdb デバッガーでこのエラーが表示されます。

Program received signal SIGSEGV, Segmentation fault.
0xbffff6e6 in ?? ()

私の知る限り、アクセスが許可されていないメモリアドレスにアクセスしようとすると、セグメンテーションエラーが発生します。

どうすれば自分の PC で実行できるようになりますか? 繰り返しますが、Intel x86-32 CPU を Ubuntu Linux で使用しています。事前に感謝します。

4

1 に答える 1