一个小游戏中记录了玩家的最高分,有更高的得分时,修改程序自身刷新纪录。要求不通过注册表,以及文本文件。

解决方案 »

  1.   

    把最高分作为资源,在程序代码中预先设置(要手工处理)其相对于EXE文件首部的偏移量,打开EXE文件写入即可。
      

  2.   

    现在这种修改自身的程序不多了吧。
    以前在DOS时代,程序确实够小,程序运行后,把自己拷贝进内存,然后在退出的时候,把先前的程序先删除了,然后重新把内存中的内容写一个文件。
    在WINDOWS下,好象程序是不能删除运行中的自己的。
    还真的想学习了。不知道怎么做。
      

  3.   

    写入.exe文件自身实现起来还是有难度的,
    因为在程序运行时,windows会建立一个可执行文件的镜像,
    这时候,windows不允许其他程序包括程序本身去write这个可执行文件,
    read是可以的.
      

  4.   

    那就……先copy到一个临时文件,再CreateProcess(),自己退出,运行游戏的是临时文件,改自己不成问题了吧?
      

  5.   

    windows是不允许,但是通过一些其它的方法可以,这是汇编级的,修改后你要保证程序再次运行到那个地方的时候可以正确的跳转。修改前需要先关必句柄,本进程映象句柄是4所以用:CloseHandle( (HANDLE)4 );
    然后调用UnmapViewOfFile()解除另外一个对应IMAGE的HANDLE,而且解除了IMAGE在内存的映射。但是后面的任何代码都不可以引用IMAGE映射地址内的任何代码。否则就OS会报错!