阅读 62

odoo代码讲解,源代码分析

代码分析--SOOT Soot是用java编写的代码优化和分析工具,用于分析源代码和中间文件。

SOOT作为一个eclipse插件,可以在eclipse中安装和运行。 本节简要介绍了SOOT插件的安装步骤。

打开eclipse,在帮助中选择安装新软件,然后单击添加。 Name可以自由写入。 URL为http://s able.github.io/soot/eclipse /

选择soot,然后单击next进行安装。 安装完成后,重新启动eclipse。

注意: luna、mars版本的eclipse的安装过程没有问题,但安装完成后不会显示soot插件。

我下载了kepler版本的。 项目中有soot菜单项

也可以单击项目代码文件(java文件),然后单击鼠标右键以查看soot选项

soot安装完成。 接下来可以使用soot进行代码分析。

可以选择要在项目中分析的代码文件,单击鼠标右键,然后选择soot选项以生成Jimple、Grimp。

关于Jimple/Grimp的介绍,引用: http://blog.csdn.net/majesty Hao/article/details/43793293

Soot有四种类型的中间代码-表示形式(IR ),每个表示四种不同的对Java Sourcode或bytecode的抽象。

Baf - 基于栈的bytecode

传统的JVM bytebode是基于堆栈操作的指令集,Dalvik基于寄存器操作。 与此对应的Baf也是同样的。 Baf抽象了什么呢? 两个忽略了常量池和bytecode命令中的type依赖。 在bytecode中,对于int和float等不同保留类型的同一操作(例如add ),有不同的命令。 这是因为在计算机中整形和浮点型的表现方法不同,在低级安装中不能将两个操作符分类为这两个不同的类型,也就是说不同数据类型的操作需要对应不同的命令。 我们在分析的时候,不需要在意它调用的是什么类型的命令,不仔细区分是int还是float,只要知道它是个数,是对那个数的什么操作就可以了。 因此,Baf用于bytecode级别的分析。

Jimple - typed, 3-addresses, statement based。

Jimple是Soot的核心,是4种IR中最重要的。 Soot可以直接编写Jimple代码,也可以从Java sourcecode或bytecode进行转换和翻译。 bytecode将翻译为untyped Jimple,并使用type inference方法将类型添加到局部变量中。 翻译的重要一步是将表达式线性化,以便每个语句最多只能有三个局部变量或常量refernce 3。 请参阅。 对于bytecode的200多种指令,Jimple只有15条,分别对应核心指令的NopStmt、IdentityStmt、AssignStmt; 函数内控制流命令的IfStmt、GotoStt、TableSwitchStmt和LookUpSwitchStmt、函数间控制流的InvoeStmt、ReturnStmt、ReturnVoidStmt、监视器命令entermmment SSA确保每个局部变量都有静态定义。 虽然目前没有看到使用SSA的可能性,但总之暂时忽略。

Shimple -- Static Single Assignment 版的Jimple

与Jimple相似,但越来越多地允许树表示和new指令。 它比Jimple更接近Java code,适合人们阅读。 可以选择run soot进行相关设置。

通过设置output options并将输出格式设置为xml,可以在sootoutput目录下找到相应的文件以分析生成的文件。


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐