/* スタック/ヒープ/(静的データ)上にコードを送り込んで実行するテスト Sat,11 Dec,2004 - Sun,12 Dec,2004 Copyright(C)2004 G-HAL 原典: Note 205 Windows (soft.windows) [ RESPONSE: 497 of 543 ] Title: Windows XP Lines: 34 Date: 2004-09-06 11:46:16+09 Author: zob10016 (hiro) */ #include #include #define CODESIZE 128 static int flag = 0; static unsigned char evildataP[CODESIZE] = { 0 }; /* データ上に領域を確保だ */ int subfunc() { return flag; } int main( int argc, char *argv[] ) { unsigned char evilstackP[CODESIZE]; /* スタック上に領域を確保だ */ unsigned char *evilheapP; /* ヒープ上に領域を確保だ */ unsigned char *srcP; int (*evilfP)(); int i; evilheapP = (unsigned char *)malloc( CODESIZE ); srcP = (unsigned char*)subfunc; for( i = 0 ; i < CODESIZE ; i++ ){ evilstackP[i] = srcP[i]; evilheapP[i] = srcP[i]; evildataP[i] = srcP[i]; } evilfP = (int(*)())evilstackP; flag = 1; if( 2 <= argc ){ switch( (argv[1])[0] ){ case 's': default: evilfP = (int(*)())evilstackP; flag = 2; break; case 'h': evilfP = (int(*)())evilheapP; flag = 3; break; case 'd': evilfP = (int(*)())evildataP; flag = 4; break; } } printf("%d\n", (*evilfP)() ); return 0; } /* [ EOF ] */