如何使字符串出现在编译的二进制可执行文件的开头?

How to make a string appears at the beginning of the compiled binary executable?

本文关键字:二进制 可执行文件 开头 编译 何使 字符串      更新时间:2023-10-16

在Windows和Debian上使用GCC和C++11进行armhf。

我需要检查可执行文件的版本字符串,以查看我的应用是否必须自行更新。

我的"版本字符串"是这样制作的:

#define VersionFileCap "-[+@+]-"
const char VersioneFile[] = { VersionFileCap MYAPP_VERSION "," __DATE__ VersionFileCap };

我可以在编译的二进制文件中看到它。

我的计划是搜索VersionFileCap,然后管理找到的字符串。为此,我将使用这个问题的答案中的代码,但它将整个文件加载到内存中,这让我担心,因为我的可执行文件很容易超过 50MB。

所以我想知道是否有办法在二进制文件的开头编译字符串,这样我就可以加载文件的一部分并更快地找到它。

仅使用一些预处理/编译器魔术参数是否可行?

至少在 Windows 上,处理此问题的正确方法是将应用的版本值存储在应用的VERSIONINFO资源中,而不是存储在应用代码中的字符串中。

如果应用想要使用版本信息填充其VersioneFile[]数组,它可以在运行时动态执行此操作。

Microsoft具有专门设计的 Win32 API 函数,用于从可执行文件(EXE 或 DLL(的VERSIONINFO资源查询数据:

GetFileVersionInfoSize()

GetFileVersionInfo()

VerQueryValue()

你的应用可以查询自己的版本数据。外部更新程序可以查询应用的版本数据。

Win32 API 可以访问可执行文件的资源,而无需一次将整个文件加载到内存中。

有关更多详细信息,请参阅 MSDN 上的版本信息。