2.0之后好像新增加了很多API,有所区别
本文采用Java+Eclipse作为开发环境
插件支持的语言 
文档:
jeb-1.5/doc/index.html
一.Hello World工程

1. Eclipse插件开发环境配置

新建Java工程->工程目录下新建lib目录->右键->add to build path
配置JavaDoc 这样写代码的时候 有实时的文档可以看
2. 编写代码
import jeb.api.IScript;  
import jeb.api.JebInstance;
public class Hello implements IScript {
protected JebInstance mJebInstance;
@Override
public void run(JebInstance jebInstance) {
jebInstance.print("Hello World");
}

}

IScript即为统一接口, 
3.JEB中执行代码
File->Run Script->选择刚刚的java文件就好
二. 文档介绍
1.主要的包
2. AST API结构
所有的AST Element实现jeb.api.ast.IElement
要么继承于jeb.api.ast.NonStatement,要么继承于jeb.api.ast.Statement
IElement定义了getSubElements,但不同类型的实现和返回结果也不同,例如:
1. 对Method进行getSubElements返回
函数的参数定义语句
函数体block
2. IfStmt会返回
判断使用的Predicate
每一个if/else/ifelse语句块
3. Assignment语句返回
左右IExpression操作数
Operator操作符
具体编写脚本中我们通常并不使用这个函数,而根据具体类型定义的更细致的函数,例如Assignment提供的getLeft和getRight.
NonStatement与Expression的区别在于,NonStatement包含了一些高阶结构,例如jeb.api.ast.Class, jeb.api.ast.Method这些并不会出现在语句中的AST结构体,他们分别代表一个Class结构和Method结构,注意不要与反射语句中使用的Class和Method混淆
Statement顾名思义就代表了一个语句,但值得注意的是这里的语句并不代表单个语句,
继承于Compound的Statement中也可能包含其他的Statement
非Compound的Statement是最基本的语句结构,它的子节点只会由Expression构成而不会包含block. 例如Assignment,可以通过getLeft和getRight调用获得左右两边的操作对象,分别为ILeftExpression和IExpression.ILeftExpression代表可以做左值的Expression,例如变量.而常量显然不实现ILeftExpression接口
Compound代表多个语句集合的语法块集合,每一个语法块以Block(也是Compound的子类)呈现,通过getBlocks调用获得.所有分支语句均继承Compound
如下例子所示:
继承于Compound的IfStm,也就是Statement
我们通过getBranchPredicate(idx)获取Predict,也就是ztz.isDead()这个Expression,而这个Expression真正的类型是子类Call.
我们可以通过getBranchBody(idx)获取if和if-else中的Block,通过getDefaultBlock获取else的Block
IExpression代表了最基本的AST节点,其实现关系如下图
IExpression接口的实现者Expression类代表了算术和逻辑运算的语句片段,例如a+b, "162" + ztz.toString(), !ztz, redrain*(ztz-162)等等,同时Predicate类是Expression类的直接子类,譬如在if(ztz162)中,该语句的Predicate左值为ztz162这个identifier,右值为null.
以ztz.test(1) + ”height" + 162这个Expression为例,其结构组成和各节点类型如下:

Expression是从右到左的结构
Call没有提供获取caller的API,不过可以通过getSubElements()获取,返回顺序为 

callee method
calling instance (if instance call)
calling arguments, one by one

参考:
http://www.secpulse.com/archives/33922.html
来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/bingghost/p/5792972.html

9. JEB 1.5插件编写一相关推荐

  1. Gulp:插件编写入门

    之前挖了个坑,准备写篇gulp插件编写入门的科普文,之后迟迟没有动笔,因为不知道该肿么讲清楚Stream这货,毕竟,gulp插件的实现不像grunt插件的实现那么直观. 好吧,于是决定单刀直入了.文中 ...

  2. VS2010插件编写学习总结

    VS2010 Addins 外接程序(插件)开发 http://www.cnblogs.com/Leo_wl/archive/2013/03/21/2973886.html 简单做了一个添加文件头注视 ...

  3. [Linux实用工具]munin-node插件配置和插件编写

    前面介绍了2篇munin使用的相关文章: [Linux实用工具]Linux监控工具munin的安装和配置 [Linux实用工具]Linux监控工具munin的展示(Nginx) 这次介绍一下munin ...

  4. maven插件编写_编写Maven插件的提示

    maven插件编写 最近,我花了很多时间为Maven编写插件或在其中工作. 它们简单,有趣且有趣. 我以为我会分享一些技巧,使编写它们时的生活更轻松. 提示1:将任务与Mojo分开 最初,您将把moj ...

  5. 【转载】Nessus安全测试插件编写教程

    Nessus安全测试插件编写教程 作者:Renaud Deraison 翻译:nixe0n 1.怎样编写一个高效的Nessus安全测试插件 在Nessus安全测试系统中, 所有的安全测试都是由ness ...

  6. Soul网关源码阅读(十)自定义简单插件编写

    Soul网关源码阅读(十)自定义简单插件编写 简介     综合前面所分析的插件处理流程相关知识,此次我们来编写自定义的插件:统计请求在插件链中的经历时长 编写准备     首先我们先探究一下,一个P ...

  7. jQuery插件编写,

    jQuery插件编写 jQuery插件 最近搞jquery插件的编写这里做下笔记 给jquery扩展的方式很多,看的我眼花缭乱 方式1 $.fun=function(){} 方式2 $.fn.fun= ...

  8. 3ds max sdk导出插件编写的心得

    3ds max sdk导出插件编写的心得 作者:yhchinabest 来自:CG先生-3D图形插件开发网http://www.cgsir.com 写在前面 为什么要写这个心得?去年11月份的时候我写 ...

  9. 3D MAX导出插件编写

    文章版权归博客园 BigCoder所有,转载请于明显位置标明原文作者及出处,以示尊重!! 原文出处:http://www.cnblogs.com/csyisong/archive/2009/09/01 ...

最新文章

  1. 可视化的Redis数据库管理工具redis-desktop-manager的初步使用(图文详解)
  2. 综合论文训练2021年评审意见
  3. 24点游戏c语言去除重复,C语言解24点游戏程序
  4. 移动端开发问题及技巧汇总
  5. 2018.8.5 复习笔记
  6. 研究发现:一心多用会使认知水平下降
  7. Python Gevent – 高性能的 Python 并发框架
  8. eclipse debug进入.class_Eclipse使用教程(图文详解)
  9. 从毛坯房到精装修,阿里云企业IT治理样板间助力云上管控和治理
  10. 记一次结合fiddler逆向破解app注册码
  11. 图像处理RIP软件,图像色彩管理,数字喷墨打印技术
  12. Could not instantiate the executor. Make sure a planner module is on the classpath
  13. 【集锦】类脑相关新闻
  14. 结构光3D成像原理及应用
  15. Lua二进制chunk
  16. [JavaME]手机玩点对点MSN传情动漫之补充说明
  17. 数字地、模拟地、信号地区分
  18. python爬取3万+条评论,解读猫眼评分9.5的《海王》是否值得一看?
  19. GitHub CEO 说:开源已经胜利,等;开源之道每周评论(2019 11 18)
  20. html的标记符一般不分大小写,HTML5标记符的属性一般不区分大小写。

热门文章

  1. SL项目创建失败_提示安装SDK
  2. windows 2008 r2 AD密码策略
  3. 【Vue2.0】— 消息订阅与发布pubsub(二十)
  4. 程序开发语言c#中的 应该发成什么音,0006. 如何在C# winform 上开发 文字转语音
  5. thinkphp连接远程数据库慢_干货分享—Niushop数据库配置
  6. 睡眠多少分钟一个循环_关于科学睡眠丨90分钟一个睡眠周期,每晚循环3到5次...
  7. 就在这段时间让自己充实起来
  8. 现在很多公司都在辞退年龄超过35岁以上的员工,原因到底为什么?
  9. 大多数人贫穷到极致时,就是富人灾难的开始,你认同这句话吗?
  10. 属羊的人2021年冲太岁运势预测