1

在寻找 c++ 解析器时,我最近偶然发现了下面的项目。其中有一个解析器似乎非常适合我的需求,但是我相信作者故意混淆了一些核心代码,这使得检查代码有点困难。

https://github.com/ArashPartow/math-parser-benchmark-project/blob/master/fparser/fpoptimizer.cc

在文件和作者的网站上有一个关于有一个简单的去混淆版本的描述,但是指示的站点似乎只有一个死链接,并且尝试联系作者没有结果。

我想知道其他 SOers 是否会知道一种快速简便的方法来逆转上述文件中的混淆。

现在我不确定,因为我不是 C++ 专家,但可能有正当的理由使代码成为这样的方式,大概因为文件的名称表明它可能是出于性能原因。

4

2 回答 2

6

在这种特定情况下,您可以尝试使用最新开发文件的此链接到项目页面- 我刚刚发现它是版本错误 - 链接显示 4.5 并且当前版本为 4.5.2 在此修订版中。他们似乎没有保留旧版本,所以在那里获取最新版本

于 2013-04-03T03:23:51.977 回答
4

大多数编译器都可以选择只在代码上运行预处理器并生成预处理器输出。这将消除使用#defines.

例如在 MSVC 中,您可以运行cl /P fpoptimizer.cc. 这将创建一个名为 fpoptimizer.i 的文件,其中包含预处理文件。

您可以在执行此操作之前删除#includes程序中的 s - 这样只有#define程序中的 s 被预处理,而不是其他内容。

gcc 提供了-E执行类似操作的选项。

于 2013-04-03T03:14:49.593 回答