您的位置:首页 > 其它

打印一首唐诗的N种实现之六:内存修改

2007-01-02 13:07 369 查看
通过调用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;


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐