2013-04-03 217 views
0

尋找一個C++解析器我最近偶然發現了下面的項目。其中有一個解析器看起來非常適合我的需求,但是我相信作者有意混淆了一些核心代碼片段,這使得檢查代碼有點困難。反混淆C++源代碼

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

有文件中的描述和作者的網站大約有作爲一個普通的反混淆的版本,但指定的網站似乎只有一個dead-link並試圖聯繫作者已經無果而終。

我想知道如果其他SOers會知道快速簡單的方法來解決上述文件中的混淆問題。

現在我不確定,因爲我不是C++專家,但它可能是有一個合法的原因代碼是它的方式,可能是因爲文件的名稱表明它可能是出於性能原因。

+8

「注:此文件包含生成的代碼(從優化資源),是 不打算通過手工修改。如果要修改的。優化器, 下載庫的開發版本。「 – Mysticial

+6

@Mysticial:'但是指定的網站似乎只有一個死鏈接,並嘗試聯繫作者已經沒有結果' –

+0

我會開始擺脫宏觀,試試這個:http://stackoverflow.com/questions/277258/cc-source-file-after-preprocessing#我認爲這段代碼被故意模糊處理,似乎沒有任何東西可以提高代碼的性能。 – Kupto

回答

6

在這種特定的情況下,你可以只嘗試此鏈接到project page, with the latest devel files - 我只是制定了這是版本是不正確的 - 鏈接說4.5和目前的版本是4.5.2,因爲這修訂。 他們似乎並不保留舊版本週圍,從而獲取最新的有

4

大多數編譯器可以選擇只運行代碼&上的預處理器來生成預處理器輸出。這將刪除使用#defines完成的任何混淆。

例如,在MSVC中,您可以運行cl /P fpoptimizer.cc。這將創建一個名爲fpoptimizer.i的文件,其中將包含預處理文件。

在執行此操作之前,您可以刪除程序中的#includes - 以便只對程序中的#define進行預處理,而不是其他的東西。

gcc提供了-E選項來做類似的事情。

+1

我給了它一個去,它產生了一個1.8MB的文件,其中包括各種其他的東西。有沒有辦法只包含文件本身的東西?順便說一句,它產生這樣的東西,有沒有辦法讓它更多一點格式化通過該命令選項? TailCall_cLessOrEq; Ljh:this-> ByteCode.pop_back(); ByteCodePtr- = 1; opcode = cLess ;; goto TailCall_cLess; Lji:this-> ByteCode.pop_back(); ByteCodePtr- = 1; opcode = cGreaterOrEq ;; goto TailCall_cGreaterOrEq; Ljj:this-> ByteCode.pop_back(); ByteCodePtr- = 1; opcode = cGreater ;; goto TailCall_cGreater; Ljk:this-> ByteCode.pop_back(); – Gerdiner

+0

@Gerdiner - 正如我所說的那樣,在執行此操作之前,從文件中移除#包含 - 這將確保預處理僅針對文件中的#定義。 – user93353