一个exe程序,如何保存数据到自身的可执行文件?

时间:2022-08-25 22:16:33
有很多exe文件,比如游戏,是把游戏结果保存在自身当中的(不是用注册表,因为我把这个exe拷贝到另一个机器,刚才的分数列表还在)。

1. exe执行的时候,windows里面我都不能删除它。那么我如何在程序里面打开这个exe文件做写入的操作呢
2. 如何写才能不冲掉exe里面的可执行代码,数据段什么的,也就是如何得到exe文件当中,可以安全的写入数据的一个区域?

8 个解决方案

#1


给自己的程序增加一个节,然后把数据写到这个PE节中。

#2


节的属性设置可读可写

#3


A.exe程序启动后,把自己复制一个副本A_COPY.exe出来,然后在运行过程中,把要记录的数据更新到副本中。
退出的时候,生成一个批处理,不断的删除A.exe,然后把A_COPY.exe改名为A.exe。最后程序退出了,批处理会执行成功。

#4


引用 1 楼 cdutboy 的回复:
给自己的程序增加一个节,然后把数据写到这个PE节中。

EXE在执行时是不能被修改的,上面3楼的方法应该可行。

#5


引用 4 楼 wltg2001 的回复:
引用 1 楼 cdutboy 的回复:
给自己的程序增加一个节,然后把数据写到这个PE节中。

EXE在执行时是不能被修改的,上面3楼的方法应该可行。


我说的是你编译程序的时候。没说运行的时候

#6


to 1-2L:

这个应该怎么做到呢? 能否用几行代码来实例化一下?

谢谢.

#7


引用 5 楼 cdutboy 的回复:
引用 4 楼 wltg2001 的回复:

引用 1 楼 cdutboy 的回复:
给自己的程序增加一个节,然后把数据写到这个PE节中。

EXE在执行时是不能被修改的,上面3楼的方法应该可行。


我说的是你编译程序的时候。没说运行的时候

晕,难道编译程序会给你的程序加一个节啊?
你保存数据的工作难道不是你自己的程序来做吗?但是它执行时由于内存映射文件的原因,它的EXE文件是不能被修改的,所以EXE自身是不能修改自身的。

#8


引用 7 楼 wltg2001 的回复:
引用 5 楼 cdutboy 的回复:
引用 4 楼 wltg2001 的回复:

引用 1 楼 cdutboy 的回复:
给自己的程序增加一个节,然后把数据写到这个PE节中。

EXE在执行时是不能被修改的,上面3楼的方法应该可行。


我说的是你编译程序的时候。没说运行的时候

晕,难道编译程序会给你的程序加一个节啊?
你保存数据的工作难道不是你自己的程序来做吗?但是……

你自己菜了就不要乱说
#pragma comment(linker,"/SECTION:节名称,RWS") 

#1


给自己的程序增加一个节,然后把数据写到这个PE节中。

#2


节的属性设置可读可写

#3


A.exe程序启动后,把自己复制一个副本A_COPY.exe出来,然后在运行过程中,把要记录的数据更新到副本中。
退出的时候,生成一个批处理,不断的删除A.exe,然后把A_COPY.exe改名为A.exe。最后程序退出了,批处理会执行成功。

#4


引用 1 楼 cdutboy 的回复:
给自己的程序增加一个节,然后把数据写到这个PE节中。

EXE在执行时是不能被修改的,上面3楼的方法应该可行。

#5


引用 4 楼 wltg2001 的回复:
引用 1 楼 cdutboy 的回复:
给自己的程序增加一个节,然后把数据写到这个PE节中。

EXE在执行时是不能被修改的,上面3楼的方法应该可行。


我说的是你编译程序的时候。没说运行的时候

#6


to 1-2L:

这个应该怎么做到呢? 能否用几行代码来实例化一下?

谢谢.

#7


引用 5 楼 cdutboy 的回复:
引用 4 楼 wltg2001 的回复:

引用 1 楼 cdutboy 的回复:
给自己的程序增加一个节,然后把数据写到这个PE节中。

EXE在执行时是不能被修改的,上面3楼的方法应该可行。


我说的是你编译程序的时候。没说运行的时候

晕,难道编译程序会给你的程序加一个节啊?
你保存数据的工作难道不是你自己的程序来做吗?但是它执行时由于内存映射文件的原因,它的EXE文件是不能被修改的,所以EXE自身是不能修改自身的。

#8


引用 7 楼 wltg2001 的回复:
引用 5 楼 cdutboy 的回复:
引用 4 楼 wltg2001 的回复:

引用 1 楼 cdutboy 的回复:
给自己的程序增加一个节,然后把数据写到这个PE节中。

EXE在执行时是不能被修改的,上面3楼的方法应该可行。


我说的是你编译程序的时候。没说运行的时候

晕,难道编译程序会给你的程序加一个节啊?
你保存数据的工作难道不是你自己的程序来做吗?但是……

你自己菜了就不要乱说
#pragma comment(linker,"/SECTION:节名称,RWS")