如何从二进制文件中获取应用程序的版本号?
How to get the version number of an application from the binary file?
我正在Linux上为一些嵌入式设备构建一个Qt/C +应用程序,我想从二进制ELF文件中读取该应用程序的版本。二进制文件不会使用 GCC 进行剥离和编译。
有没有办法构建一个可执行文件,其他一些程序可以简单地读取该文件以获取应用程序的版本?
谢谢。
有没有办法构建一个可执行文件,其他一些程序可以简单地读取该文件以获取应用程序的版本?
这能做到吗?绝对!
应该这样做吗?应该不会。
执行此操作的更简单方法之一:将应用程序版本放入文本字符串中,并使用__attribute__((section("my_app_version")))
在您选择的特殊部分中查找此字符串。文档。
观察readelf -x.my_app_version
可以提取此字符串。
现在您所要做的就是复制readelf
的作用:读取ELF文件头以查找部分,然后读取适当的部分。这将需要大量的代码,一个熟练的人可以在几个小时内完成,或者如果愿意使用帮助库,如libelf,则速度更快。
那你为什么不这样做呢?
由于您正在构建嵌入式系统,因此在某些时候您可能会创建要烧录到设备中的文件系统映像。
在创建文件系统的最后一步之前,将一个文本文件放入其中,其中包含所有相关的版本信息。例如,如果要将app1
和app2
放入图像中,则可以执行以下操作:
VERSIONS=/tmp/rootfs/etc/VERSIONS
rm -f $VERSIONS
echo BuiltBy=$(whoami)@$(hostname) >> $VERSIONS
echo BuiltOn=$(date) >> $VERSIONS
echo App1=$(/tmp/build/bin/app1 --version) >> $VERSIONS
echo App2=$(/tmp/build/bin/app2 --version) >> $VERSIONS
现在,设备上运行的任何程序都可以轻松找到适当的版本信息,而无需从二进制文件中提取它。
某些qt应用程序显示版本,如果您使用命令行arg--version
运行它,例如
$ kate --version
kate 15.12.3
相关文章:
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 适用于 WebView2 旧版本的示例应用程序
- 在Visual Studio中单实例Qt应用程序版本5.11.1中,在所有其他窗口的顶部打开Qt MainWindow
- 由于____chkstk_darwin,在Catalina上使用部署10.10编译的MacOS应用程序在HighSierra版本<崩溃
- 一个32位版本的应用程序,建立在CentOS 6 x64上,当在较新的Linux上启动时,在"dl_itera
- Qt 应用程序中与Qt版本相关的运行时错误
- 如何从二进制文件中获取应用程序的版本号?
- 应用程序中的两个不同版本的库
- GCC编译器,为较低版本的GCC编译应用程序
- 部署应用程序,C++,Visual Studio 2015社区版本
- 在应用程序中加载QT LIB(不同的版本)
- 开发C++应用程序,目标服务器有不同的std lib版本,最佳实践是什么
- 集成在不同VS版本中开发的应用程序
- 使用WinSparkle更新新版本后,它不会自动启动应用程序
- 同一个应用程序中的同一库的两个版本
- 在不同的 Ubuntu 版本中编译和运行 c++ 应用程序
- PHP shell_exec不适用于两个不同的应用程序版本
- 正在从应用程序中获取应用程序版本
- 在应用程序版本中使用svn修订号
- 如何使用 c++/QT 在控制面板中更新应用程序版本auto_update