Ami*_*aha 2 c c++ compiler-construction executable exe
我的大学教授问我如何识别文件是.exe使用 C 还是 C++ 创建的?
有谁知道如何识别吗?
简单的方法:如果您的二进制文件尚未去除符号,则其 C++ 组件将包含损坏的名称,例如?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@、.?AVbad_typeid@@或_ZNSt8ios_base4InitC1Ev。AC 二进制文件不应包含损坏的符号。另一方面,以_R强烈暗示Rust name mangling开头的符号。
如果您没有任何符号,您可以使用导入或字符串来获取提示,但您开始进入猜测的领域:
如果二进制文件是来自 MSVC 的 C++ 二进制文件,它将链接到 MSVC++ 运行时或另一个 C++ 运行时(例如 libstdc++)。因此,您将看到"Microsoft Visual C++ Runtime Library"嵌入在二进制文件中的文字字符串,或者您将看到一个名称类似于导入表中的文件msvcp###.dll(请注意名称中的P )。
如果您使用的是 msys/mingw/cygwin 之类的东西,您仍然会看到与 C++ 运行时库相关的字符串,但确切的措辞会有所不同。GLIBCXX_3.4即使在从 clang++ 中剥离的二进制文件中,我也观察到了一些损坏的名称,但您的结果可能会有所不同。其他提示是 C++ 异常或类的名称,例如basic_string或bad_typeid。
如果做不到这一点,您可以查找看起来像损坏名称的字符串(参见第一段);我查看了系统上的一些 C++ 二进制文件,尽管它们的符号表已被删除,但它们仍然有大量以字符串形式显示的损坏名称。
其他赠品是指向代码部分的指针表,它们可能形成虚拟调度表或Windows RTTI。在 Windows x86 上,预计大量此类函数会从 ECX/RCX 获取指针输入(即this)。
请注意,这并不是万无一失的。如果愿意的话,我可以创建一个 C++ 二进制文件,然后小心地混淆所有这些提示。一旦您知道如何负责任且有效地使用它,真正的逆向工程工具(例如 Ghidra)就可以帮助您做出这些决定以及更多见解。
| 归档时间: |
|
| 查看次数: |
945 次 |
| 最近记录: |