是否有可以在Linux中使用的库,它将返回Explorer的Version选项卡中列出的Windows EXE文件的属性?这些是产品名称,产品版本,描述等字段。
对于我的项目,EXE文件只能从内存中读取,而不能从文件中读取。我想避免将EXE文件写入磁盘。
答案 0 :(得分:2)
我知道pev
是Ubuntu上的一个工具,它允许您查看此信息以及许多其他PE头信息。我也知道它是用C. Maybe you'll want to have a look at it写的。有点来自文档中的history section:
pev已经从2010年诞生了一个简单的需求:一个程序来找出答案 PE32文件的版本(文件版本),可以在Linux中运行。 此版本号存储在参考资料(.rsrc)部分,但在 我们决定简单地搜索整个字符串的时间 二进制,没有任何优化。后来我们决定解析PE32文件,直到达到.rsrc 部分并获取文件版本字段。为了做到这一点,我们 意识到我们必须解析整个文件,我们想是否可以 打印出所有字段和值......
直到版本0.40,pev是一个解析PE头的独特程序 和部分(现在readpe负责此事)。在版本0.50我们 专注于恶意软件分析和将pev分成各种程序 超出一个名为libpe的库。目前所有的pev程序都使用libpe。
答案 1 :(得分:1)
安装winelib http://www.winehq.org/docs/winelib-guide/index 这是MS Windows API到其他系统的端口,包括linux。
然后使用MS Windows API。像GetFileVersionInfo
一样
http://msdn.microsoft.com/en-us/library/windows/desktop/ms647003(v=vs.85).aspx
或任何其他功能。
我从来没有这样做,但我会从这些发现开始。
关于内存约束中的exe文件,可以将其复制到RAM磁盘吗?
答案 2 :(得分:1)
这是支持PE32 +的代码补丁。测试了一些文件,似乎工作。
//optHeader is a IMAGE_OPTIONAL_HEADER32
const char *optHeader = coff + 20;
WORD magic = READ_WORD(optHeader);
if (magic != 0x10b && magic != 0x20b)
return NULL;
//dataDir is an array of IMAGE_DATA_DIRECTORY
const char *dataDir = optHeader + (magic==0x10b ? 96: 112);
DWORD vaRes = READ_DWORD(dataDir + 8*2);
答案 3 :(得分:0)
以下是Tcl语言中的一个示例,用于解析.exe文件以检索版本信息。
Reading version information from Win32 executables
这web page describes the .exe header format。我不确定此信息的日期或是否适用于更新版本的Windows。然而,这是一个起点。