5

シェルコードのチュートリアルで、次の例を見ました。

 main(){

    exit(0);

 }

アイデアは、exit()-syscall を作成することでした。したがって、アセンブリを生成します。

  Section .text

      global _start

 _start:
      mov ebx, 0
      mov eax, 1
      int 0x80

これは分かります。0 は ebx に保存する exit() の引数、1 は exit syscall の番号で、0x80 で CPU をカーネル モードに変更し、syscall を実行します。

その後、次のオペコードを生成します。

    bb 00 00 00 00
    b8 01 00 00 00
    cd 80

次に、これを次のような C 言語に翻訳します。

 char example[] = "\xbb\x00\x00\x00\x00"
                  "\xb8\x01\x00\x00\x00"
                  "\xcd\x80"

  int main(){

  int *pointer; 
  pointer = (int *)&pointer+2;
  (*pointer) = (int)example;
  }

したがって、私が理解しているのは、彼らがオペコードを char 配列で受け取るということですが、main() メソッドで何を作成したかはわかりません。最初の行は大丈夫です。しかし、2行目、3行目で何を表現したいのか?

よろしくお願いします、

4

1 に答える 1