私はスタックでコードを実行するこの例を見ていました:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char shellcode[] = “\xeb\xfe”;
int main(int argc, char *argv[]){
void (*f)();
char x[4];
memcpy(x, shellcode, sizeof(shellcode));
f = (void (*)()) x;
f();
}
これにより、セグメンテーション違反が発生します。私の理解では、xのサイズは4バイトしかないため、シェルコードは残りのバイトのメモリを使い果たします。そして、これにより、スタックメモリにコピーする書き込み操作が作成され、セグメントが発生します。スタックメモリが読み取り専用であるため、障害が発生します。私の理解は正しいですか?