您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

反編譯代碼與源代碼的比較算法

大?。?/span>78 人氣: 2010-02-09 需要積分:0
{$username}的空間

用戶級別:注冊會員

貢獻(xiàn)文章:

貢獻(xiàn)資料:

反編譯代碼與源代碼的比較算法

摘要:現(xiàn)有反編譯器產(chǎn)生的代碼與對應(yīng)的源代碼之間存在差異,找到并理解差異有助于改進(jìn)并完善反編譯器的設(shè)計。該文給出一種適用
于C 語言反編譯代碼與源代碼的比較算法。該算法以語法樹匹配方法為基礎(chǔ),定義新的C 語言中間代碼表示形式并對表達(dá)式進(jìn)行動態(tài)匹配,
提高了語法樹匹配的準(zhǔn)確性。實(shí)驗(yàn)結(jié)果表明,該算法能有效計算出反編譯代碼與源代碼之間的多數(shù)差異。

反編譯代碼:
int proc_1(int arg1){
int loc1,loc2;
loc1=arg1;
if(loc1==1||loc1==0)
loc2=1;
if(loc1!=1)
if(loc1!=0){
loc1--;
loc2=proc_1(loc1);
loc2+=proc_1(loc1); }
return loc2; }
在上述代碼中,一段計算Fibonacci 數(shù)的源代碼可能只是
一個if-else 語句,而對應(yīng)的反編譯代碼卻包含了一個賦值語
句、2 個if 語句和一個return 語句。將程序轉(zhuǎn)換成中間代碼
能有效減少上述差異。因此,本文在CIL 的基礎(chǔ)上定義了一
種新的中間代碼表示形式ECIL,其主要語法結(jié)構(gòu)如下:
func ::= Func(stmt list)
stmt ::= Loop(stmt list) | If(exp, stmt list)
| Instr(instr list) | Return(exp option)
| Goto (stmt)
instr::= Set(lvalue, exp)
| Call(lvalue option, exp, exp list)

非常好我支持^.^

(4) 100%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?