动态修改程序 一个小游戏中记录了玩家的最高分,有更高的得分时,修改程序自身刷新纪录。要求不通过注册表,以及文本文件。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把最高分作为资源,在程序代码中预先设置(要手工处理)其相对于EXE文件首部的偏移量,打开EXE文件写入即可。 现在这种修改自身的程序不多了吧。以前在DOS时代,程序确实够小,程序运行后,把自己拷贝进内存,然后在退出的时候,把先前的程序先删除了,然后重新把内存中的内容写一个文件。在WINDOWS下,好象程序是不能删除运行中的自己的。还真的想学习了。不知道怎么做。 写入.exe文件自身实现起来还是有难度的,因为在程序运行时,windows会建立一个可执行文件的镜像,这时候,windows不允许其他程序包括程序本身去write这个可执行文件,read是可以的. 那就……先copy到一个临时文件,再CreateProcess(),自己退出,运行游戏的是临时文件,改自己不成问题了吧? windows是不允许,但是通过一些其它的方法可以,这是汇编级的,修改后你要保证程序再次运行到那个地方的时候可以正确的跳转。修改前需要先关必句柄,本进程映象句柄是4所以用:CloseHandle( (HANDLE)4 );然后调用UnmapViewOfFile()解除另外一个对应IMAGE的HANDLE,而且解除了IMAGE在内存的映射。但是后面的任何代码都不可以引用IMAGE映射地址内的任何代码。否则就OS会报错! 使用VS2008/2005制作安装包,如何安装到C:\Documents and Settings\All Users\Documents下? 问个有难度的问题:怎么实现窗口的内容等比例的缩放? 怎么改变程序运行时的标题栏图标和标题呢? [挑战]如何用DirectSoundBuffer播放ADPCM压缩格式的WAV文件? 编译连接没错,运行时出错的问题最难解决,问你们一个! 如何将DataGrid当前内容输出到文本文件中? 如何分解一个超过10M的运用程序呢! 这条语句那里错了 MFC导出WORD com事件 能介绍几本VC书吗? 请教高手,指点迷津
以前在DOS时代,程序确实够小,程序运行后,把自己拷贝进内存,然后在退出的时候,把先前的程序先删除了,然后重新把内存中的内容写一个文件。
在WINDOWS下,好象程序是不能删除运行中的自己的。
还真的想学习了。不知道怎么做。
因为在程序运行时,windows会建立一个可执行文件的镜像,
这时候,windows不允许其他程序包括程序本身去write这个可执行文件,
read是可以的.
然后调用UnmapViewOfFile()解除另外一个对应IMAGE的HANDLE,而且解除了IMAGE在内存的映射。但是后面的任何代码都不可以引用IMAGE映射地址内的任何代码。否则就OS会报错!