很多人认为通过函数指针不能修改函数内容,而只能通过函数指针调用函数,今天在论坛上看到一段代码,通过函数指针修改函数内容,颠覆了某些人对函数指针的看法,转引过来,慢慢欣赏。 #include <stdio.h> #include <windows.h> #include <memory.h> using namespace std; void foobar(void) { printf( "function foobar %x/n" , foobar ); } static const int acode[] = { 0x68909090 , (int)(acode+5) , 0xb8909090 , (int)printf , 0xc358d0ff , 0x6c6c6548 , 0x6f57206f , 0x21646c72 , 0x0000000a }; void hack( void (*proc)(void) ) { unsigned char* pU8 = (unsigned char*)proc; memcpy( pU8 , acode , sizeof(acode) ); } int main() { DWORD oldf = 0; VirtualProtectEx( GetCurrentProcess() , foobar , sizeof( acode ) , PAGE_READWRITE , &oldf ); foobar(); hack( foobar ); foobar(); return 0; }