[英]How to embed an exe file into another exe file as a resource in 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_string
或bad_typeid
。
如果做不到这一点,您可以寻找看起来像错位名称的字符串(请参阅第一段); 我在我的系统上查看了一些 C++ 二进制文件,即使它们的符号表被删除,它们仍然有大量被破坏的名称显示为字符串。
其他赠品是指向代码部分的指针表,它可能形成虚拟调度表,或Windows RTTI 。 在 windows x86 上,期望大量这些函数从 ECX/RCX(即this
)获取指针输入。
请注意,这并非万无一失。 如果愿意,我可以创建一个 C++ 二进制文件,然后仔细混淆所有这些提示。 一个真正的逆向工程工具,如 Ghidra,可以帮助您做出这些决定以及更多的见解,一旦您知道如何负责任和有效地使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.