【发布时间】:2011-08-19 18:38:44
【问题描述】:
节日快乐!
我有一个可执行文件(Unix 或 Windows - 它应该是交叉编译的)。如果一个人用任何编辑器打开这个可执行文件并在最后写一些东西——应用程序仍然可以完美运行。 在执行时,应用程序及其所有数据都加载到 RAM 中。因此,文件的用户写入部分也被加载到内存中。
有没有机会读取这些数据?
我需要快速访问这些数据。其他变通方法不行,因为太费时间了:
- 直接从文件(在硬盘上)读取或映射它是不行的,因为应用程序必须在每次运行时读取这个文件,但是这个应用程序每秒有很多启动。
- 将共享内存与另一个进程(如服务器,保存数据)一起使用不是交叉编译
- 在应用程序和所谓的服务器之间使用管道不够快,恕我直言。
这就是为什么我决定在应用程序的末尾写一些东西。
提前致谢!
【问题讨论】:
-
我不舒尔,所以只有一个评论:你不应该做这样的事情。操作构建可执行文件并在末尾添加一些数据可能会损坏您的二进制文件。您应该创建一个额外的数据文件。根据数据的类型,您应该在启动时将文件作为资源打开并将内容存储到内存中。或者您必须将数据编译到可执行文件中。
-
Thomas,将数据添加到末尾不会损坏二进制文件本身。使用额外的文件非常耗时。存储的数据基本上是普通的文本。
-
“耗时”是什么意思?这就是世界其他地方所做的!此外,这对代码签名等也有影响。
-
@serenheit 使用文本编辑器(在最坏的情况下,Windows 上的记事本)编辑二进制文件会损坏二进制文件。你不应该做那样的事情。不使用文本编辑器
-
@Joe 耗时意味着读取文件需要大约 50% 的程序工作时间。这部分必须非常快,因为我有一个服务器对这个二进制文件有很多请求。