2011-07-01 84 views
3

因此,如果使用英特尔编译器对其进行编译,从嵌入在可执行文件中的符号中判断是相对直接的。来自可执行文件中像__intel_proc_init这样的符号。如何判断编译二进制文件时使用了哪种版本的英特尔编译器

有没有办法告诉英特尔编译器使用类似的诊断程序编译二进制文件的版本?

+2

你是否玩过'objdump'来查看是否有任何版本标记的痕迹? –

+0

我唯一发现的是一个名为intel_id.71.0.0.0的符号,但它不清楚这意味着什么。 –

回答

0

以下Fortran源代码将在运行时输出英特尔编译器版本。在其他语言中显然类似的代码....会满足您的需求吗?如果没有,它可能会提供一个线索在可执行文件中的符号。

#ifdef __INTEL_COMPILER 
     write (*, 1050) __INTEL_COMPILER 
     1050 format ("Fortran code compiled with Intel ifort, version ", I0 /) 
#endif 
+0

谢谢,但我原来的问题是关于我只有最终编译的可执行文件而不是源文件的情况。 –

1

PEID能够为MSVC二进制做到这一点,所以你可能要检查一下,看看它是否适合英特尔,如果是的话,那么你就需要从他们扫描的决策者发现在PE/OBJ转储(iirc的一些信息是在纯文本在PE)

+0

我没有Windows平台使用,所以我不能尝试这种方法。谢谢你告诉我关于PEID,但这听起来很有用。 –

2

所以我想我想出了一个部分回答我自己的问题。使用字符串工具,我能够从Fortran的可执行文件中提取以下字符串:

@(#)英特尔Fortran RTL消息目录V10.1-101 01 - 8 - 2007

从又是一个Fortran可执行文件,我发现下面的字符串:

/opt/intel/Compiler/11.1/073/bin/intel64/ifort

@(#)英特尔Fortran RTL消息目录V11.1-107 16-Mar-2010

但是,我无法从C编译的可执行文件中提取任何这样的字符串。

相关问题