C库从Linux读取EXE版本?

时间:2012-09-12 21:53:07

标签: c windows linux portable-executable

是否有可以在Linux中使用的库,它将返回Explorer的Version选项卡中列出的Windows EXE文件的属性?这些是产品名称,产品版本,描述等字段。

对于我的项目,EXE文件只能从内存中读取,而不能从文件中读取。我想避免将EXE文件写入磁盘。

4 个答案:

答案 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。然而,这是一个起点。

相关问题