繁体   English   中英

如何识别exe文件是c还是c++?

[英]How to identify an exe file is in c or c++?

上次viva,我的大学教授问我一个问题,如何识别一个.exe文件是c还是c++? 任何人都可以知道这个如何识别那个..?

简单的方法:如果你的二进制文件没有被剥离符号,它的 C++ 组件将包含损坏的名称,例如?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@ , .?AVbad_typeid@@_ZNSt8ios_base4InitC1Ev C 二进制文件不应该有损坏的符号。

如果您没有任何符号,您可以使用导入或字符串来获取提示,但您开始进入 realm 的猜测:

如果二进制文件是来自 MSVC 的 C++ 二进制文件,它将链接到 MSVC++ 运行时或另一个 C++ 运行时(例如 libstdc++)。 因此,您将看到二进制文件中嵌入的文字字符串"Microsoft Visual C++ Runtime Library" msvcp###.dll或者您将在进口表。

如果您使用的是 msys/mingw/cygwin 之类的东西,您仍然会看到与 C++ 运行时库相关的字符串,但确切的措辞会有所不同。 我观察到GLIBCXX_3.4以及一些损坏的名称,甚至在来自 clang++ 的剥离二进制文件中也是如此,但您的结果可能会有所不同。 其他提示是 C++ 异常或类的名称,例如basic_stringbad_typeid

如果做不到这一点,您可以寻找看起来像错位名称的字符串(请参阅第一段); 我在我的系统上查看了一些 C++ 二进制文件,即使它们的符号表被删除,它们仍然有大量被破坏的名称显示为字符串。

其他赠品是指向代码部分的指针表,它可能形成虚拟调度表,或Windows RTTI 在 windows x86 上,期望大量这些函数从 ECX/RCX(即this )获取指针输入。

请注意,这并非万无一失。 如果愿意,我可以创建一个 C++ 二进制文件,然后仔细混淆所有这些提示。 一个真正的逆向工程工具,如 Ghidra,可以帮助您做出这些决定以及更多的见解,一旦您知道如何负责任和有效地使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM