Maple-IR是Java字节码的基于工业IR的静态分析框架。目前,它实现了基于SSA形式的分析以及从字节码到IR的构建和破坏。该工具链采用字节码输入,将其提起到SSA IR,转换IR,然后将重新编码重新编译到字节码。这是通过象征性地执行每种方法在模拟堆栈时完成的,类似于二进制忍者或IDA Pro的Hex射线运行方式。术中数据流分析已充分实施,并且还实施了诸如恒定折叠和复制促进之类的优化。还可以使用CFG GraphViz出口商;请参阅下面的示例。
Maple-IR不在主动发展中。尽管欢迎代码贡献,但它无限期地进行中断。请在问题跟踪器上提出问题,评论和问题。
尽管很少努力,但目前以其当前形式的枫木尚未准备就绪。
如果您使用Maple-ir,请告诉我们!我们很想听听您使用的任何酷项目。

“这就像LLVM,但更糟。”
这是针对以下代码进行了优化,破坏(后SSA)IR的GraphViz可视化:
void test130 () {
int x = 5 ;
int y = 10 ;
do {
try {
trap ( x , y );
y = x ;
trap ( x , y );
y = 123 ;
} catch ( RuntimeException e ) {
do {
trap ( x , y );
int z = y ;
trap ( x , y );
y = x ;
trap ( x , y );
x = z ;
trap ( x , y );
} while (! p ());
}
} while ( p ());
System . out . println ( x );
System . out . println ( y );
}
这是从fernflower epompiler中获取的优化SSA形式的一个较不适的功能:
SSA破坏是使用Sreedhar等人的方法实施的。 Boissinot等人。Boissinot驱动器目前是默认的驱动器。 SSA结构是根据使用优势前沿的Cytron等人的方法基于Cytron等人的方法,基于快速的1次线性扫描算法实施。有关更多详细信息,请参见ssagenpass.java。由于异常范围,在Java中的字节码破坏是棘手的。此外,由于循环嵌套,很难以简单的方式线性化控制流程图(CFG)。线性化是通过递归应用Tarjan的超连接组件算法来处理的。根据控制流程图的结构将每种方法的异常表丢弃和再生。有关更多详细信息,请参见ControlFlowGraphDumper。
有关更多详细信息,请参阅白皮书。
javac设计。例如,这意味着finally封锁进行了正确处理,尽管并非整齐。 构建:
mvn clean compile test package
该构建将产生两个罐子,一个罐子包括依赖关系( mapleir-full.jar ),一个没有( mapleir-full-with-deps.jar )。您也可以单独使用每个模块。
然后,可选:
mvn install
您还可以在Jitpack上获得Maple-ir。
联系人:请提出问题,我将尽力尽快做出反应。
分享将导致报告并打败(祝福)
Maple-IR在GPLV3下获得许可。有关更多信息,请参阅此处。
版权(C)2022 BIBL和RCX