您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>源码下载>数值算法/人工智能>

反编译代码与源代码的比较算法

大小:78 人气: 2010-02-09 需要积分:0
{$username}的空间

用户级别:注册会员

贡献文章:

贡献资料:

反编译代码与源代码的比较算法

摘要:现有反编译器产生的代码与对应的源代码之间存在差异,找到并理解差异有助于改进并完善反编译器的设计。该文给出一种适用
于C 语言反编译代码与源代码的比较算法。该算法以语法树匹配方法为基础,定义新的C 语言中间代码表示形式并对表达式进行动态匹配,
提高了语法树匹配的准确性。实验结果表明,该算法能有效计算出反编译代码与源代码之间的多数差异。

反编译代码:
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 数的源代码可能只是
一个if-else 语句,而对应的反编译代码却包含了一个赋值语
句、2 个if 语句和一个return 语句。将程序转换成中间代码
能有效减少上述差异。因此,本文在CIL 的基础上定义了一
种新的中间代码表示形式ECIL,其主要语法结构如下:
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%

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!