如何使字符串出现在编译的二进制可执行文件的开头?
How to make a string appears at the beginning of the compiled binary executable?
在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 上的版本信息。
相关文章:
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- CMake:如何将库 A 链接到库 B,然后将可执行文件链接到库 A
- 如何使字符串出现在编译的二进制可执行文件的开头?
- 程序在使用 system() 启动另一个可执行文件时停止
- 如何更改使用 CPack 安装的可执行文件的名称?
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- CMake:我们可以为一组不形成可执行文件或库的特定文件指定包含目录吗?
- 如何将图像传入C++可执行文件并将输出图像存储在新目录中?
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 如何在 linux 可执行文件中使用静态库
- 错误:当我从"WinDbg"打开可执行文件时,找不到符号文件。默认导出 ntdll 的符号.dll
- 编译的C可执行文件被Windows defender检测为病毒
- 使用 CMake 在可执行文件中嵌入二进制数据
- c ++:如何为每个特征制作特定的二进制文件(可执行文件)?
- 在运行时动态更新二进制文件(可执行文件)而不停止的任何类型的方法
- 如何从C中的可执行文件中检索平面二进制文件
- Windows NT 二进制可执行文件内部常量字符串编码
- 在本机可执行文件中嵌入.net二进制文件
- 在c++项目中调用二进制可执行文件