反編譯代碼與源代碼的比較算法
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
反編譯代碼與源代碼的比較算法
摘要:現(xiàn)有反編譯器產(chǎn)生的代碼與對(duì)應(yīng)的源代碼之間存在差異,找到并理解差異有助于改進(jìn)并完善反編譯器的設(shè)計(jì)。該文給出一種適用
于C 語言反編譯代碼與源代碼的比較算法。該算法以語法樹匹配方法為基礎(chǔ),定義新的C 語言中間代碼表示形式并對(duì)表達(dá)式進(jìn)行動(dòng)態(tài)匹配,
提高了語法樹匹配的準(zhǔn)確性。實(shí)驗(yàn)結(jié)果表明,該算法能有效計(jì)算出反編譯代碼與源代碼之間的多數(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; }
在上述代碼中,一段計(jì)算Fibonacci 數(shù)的源代碼可能只是
一個(gè)if-else 語句,而對(duì)應(yīng)的反編譯代碼卻包含了一個(gè)賦值語
句、2 個(gè)if 語句和一個(gè)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%
不好我反對(duì)
(0) 0%
下載地址
反編譯代碼與源代碼的比較算法下載
相關(guān)電子資料下載
- Makefile簡(jiǎn)介和使用方法 530
- 當(dāng)一名高職生成為開源代碼頂級(jí)貢獻(xiàn)者 111
- git命令的基本使用 357
- 分享一套生產(chǎn)管理MES系統(tǒng)源碼,可以直接拿來搞錢的好項(xiàng)目 140
- C/c++源代碼qt軟件 svn版本管理開發(fā)如何防泄密? 48
- 為什么安秉信息的源代碼防泄密軟件這么穩(wěn)定? 76
- C語言必備知識(shí)編譯預(yù)處理 421
- 非??煽康腸#+svn或git服務(wù)器源代碼防泄密方案 全解析 82
- 極狐GitLab—新一代源代碼管理倉(cāng)庫 152
- 能夠生成java文檔注釋的命令 140