自分自身を書き換えるプログラム
■ このスレッドは過去ログ倉庫に格納されています
0037デフォルトの名無しさん
NGNG2.関数ポインタにしておいて必要に応じて差し替える
3.functorにしておいて(以下略
4.その他
>>18
>Windows上ではコード領域を書き換えようとすると例外が起こる
自前の領域なら大丈夫。
int main()
{
int x = 0;
BYTE *code = (BYTE *)malloc(64);
code[0] = 0xB8; // mov eax
code[1] = 0x64; // 100
code[2] = 0x00;
code[3] = 0x00;
code[4] = 0x00;
code[5] = 0xC3; // ret
// 関数ポインタにキャストして実行してやると x = 100になる
x = (*((int (*)(void))&code))();
printf( "x = %d\n", x );
free( code );
return 0;
}
■ このスレッドは過去ログ倉庫に格納されています