7

很抱歉- C++ 源代码可以被视为设计的实现,而逆向工程我的意思是让设计恢复原状。似乎你们中的大多数人都将其视为从二进制文件中获取 C++ 源代码。我在Understanding a C++ codebase by generate UML - tools&methology上发布了一个更精确的问题


我认为有很多工具可以对 C++(源代码)进行逆向工程,但通常要弄清楚你得到的东西并不那么容易。

有人找到了一个好的方法吗?

我认为我可能希望看到的一件事是 GUI 层以及它是如何分离的(或不与其余部分分离的)。认为这些工具应该以某种方式检测包,然后让我手动组织它。

4

4 回答 4

10

据我所知,没有可靠的工具可以对编译的 C++ 进行逆向工程。

此外,我认为建造这样的设备几乎是不可能的。编译后的 C++ 程序只不过是机器语言指令。为了知道它是如何映射到 C++ 结构的,您需要无限地了解编译器、编译器设置、包含的库等。

你为什么想要这样的东西?根据您的需求,可能还有其他方法可以完成您真正追求的目标。

于 2010-11-23T23:46:50.247 回答
4

While it isn't a complete solution. You should look into IDA Pro and Hexrays.

It is more for "reverse engineering" in the traditional sense of the phrase. As in, it will give you a good enough idea of what the code would look like in a C like language, but will not (cannot) provide fully functioning source code.

What it is good for, is getting a good understanding of how a particular segment (usually a function) works. It is "user assisted", meaning that it will often do a lot of dereferences of offsets when there is a really a struct or class. At which point, you can supply the decompiler with a struct definition (classes are really just structs with extra things like v-tables and such) and it will reanalyze the code with the new type information.

Like I said, it isn't perfect, but if you want to do "reverse engineering" it is the best solution I am aware of. If you want full "decompilation" then you are pretty much out of luck.

于 2010-11-24T03:34:03.137 回答
3

您可以使用 dissembly 提取控制流,但您将永远无法恢复数据类型......

汇编中只有整数(可能还有一些短裤)。想想对象、数组、结构、字符串和指针算术都是同一种类型!

于 2010-11-23T23:58:46.627 回答
1

http://sourceforge.net/projects/oovaide/或 github 上的 OovAide 项目有一些可能会有所帮助的功能。它使用 CLang 编译器从源代码中检索准确的信息。它扫描目录以查找源代码,并将信息收集到一个较小的数据集中,其中包含分析所需的信息。

一个概念称为区域图。它以非常高的级别显示了类之间的关系,因为每个类在图表上都显示为一个点,并且显示了连接它们的关系线。这允许图表显示数百或数千个类。OovAide 程序区域图显示有一个名为“Show Child Zones”的选项,它将目录中的类彼此靠近。还有目录过滤器,可以减少非常大的项目图表上显示的类的数量。区域图示例及其工作方式如下所示:http: //oovaide.sourceforge.net/articles/ZoneDiagrams.html

如果在构建设置中为目录分配了组件类型,那么组件图将显示组件之间的依赖关系。这甚至显示了哪些组件依赖于外部组件,例如 GTK 或其他外部库。

下一层显示了类似于 UML 类图的东西,但显示了所有关系,而不仅仅是聚合和继承。它可以显示在方法中使用的类,或作为参数传递给方法的类。可以选择任何类作为起点,然后在将类添加到图表之前,将显示一个列表,允许查看哪些类将按关系类型显示。

最低级别显示序列图。这允许在显示包含方法的类时向上或向下导航调用树。

于 2014-09-02T17:47:58.930 回答