通过调用VirtualProtectEx来修改,通过修改main()函数的入口地址来达到修改打印内容的目的。
完整的代码如下:
int main(int argc, char* argv[]);

int mine()

...{
cout << "白日依山尽, 黄河入海流, 欲穷千里目, 更上一层楼. ";
return 0;
}

int SetHook()

...{
DWORD flag = PAGE_EXECUTE_READWRITE;
DWORD mineAddr = (DWORD)mine;
DWORD mainAddr = (DWORD)main;
mineAddr -= (mainAddr + 5);

VirtualProtectEx(GetCurrentProcess(), (BYTE*)mainAddr, 200, flag, &flag);
((BYTE*)mainAddr)[0] = 0xe9;
((BYTE*)mainAddr)[1] = (BYTE)(mineAddr);
((BYTE*)mainAddr)[2] = (BYTE)(mineAddr>>8);
((BYTE*)mainAddr)[3] = (BYTE)(mineAddr>>16);
((BYTE*)mainAddr)[4] = (BYTE)(mineAddr>>24);
VirtualProtectEx(GetCurrentProcess(), (BYTE*)mainAddr, 200, flag, &flag);

return 0;
}

int s = SetHook();

int main(int argc, char* argv[])

...{
cout << "白日依山尽, ";
return 0;
}