書き込みアクセスを許可するために、protect を使用して .text セグメントの値を変更しようとしています。
int pageSize = sysconf(_SC_PAGE_SIZE);
int *toModify = (int *)(foo+5);
if (mprotect(toModify, pageSize, PROT_WRITE) < 0 ) {
perror("mprotect failed with error:");
return -1;
}
*toModify = 5;
printf("Modify :%i",foo());
mprotect は機能しません。常にmprotect failed with error:: Invalid argument
エラーを返します。
foo は、関数の 5 バイト後に格納される int を返すメソッドです (これが foo+5 の理由です)。