シェルコードのチュートリアルで、次の例を見ました。
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行目で何を表現したいのか?
よろしくお願いします、