通过调用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;
}