9. JEB 1.5插件编写一

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)

时间: 2024-10-10 22:21:18

9. JEB 1.5插件编写一的相关文章

jQuery插件编写

jQuery种类 1.封装对象方法的插件,这种插件是我们常用的插件,后面将会具体针对这种插件介绍,如:$("#div").parent(); 2.封装全局函数的插件 如:jQuery.ajax() 3.选择器插件 如:$("ul li:eq(0)") 基本要点 1.所有的对象方法(第1种)都应该附加在jQuery.fn=jQuery.prototype,而所有的全局函数都应该附加在jQuery上 2.this在插件内部,是通过选择器获取的jQuery对象,而例如cl

jQuery插件编写及链式编程模型小结

JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQuery插件,然后像使用jQuery那样来操作DOM.  一.jQuery插件开发快速上手 1.jQuery插件模板 关于jQuery插件的编写,我们可以通过为jQuery.fn增加一个新的函数来编写jQuery插件.属性的名字就是你的插件的名字,其模板如下: (function($){ $.fn.m

jQuery插件编写及链式编程模型

jQuery插件编写及链式编程模型小结 JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQuery插件,然后像使用jQuery那样来操作DOM.  一.jQuery插件开发快速上手 1.jQuery插件模板 关于jQuery插件的编写,我们可以通过为jQuery.fn增加一个新的函数来编写jQuery插件.属性的名字就是你的插件的名字,其模板如下:

JQuery插件编写之定制版选择器

很多人是因为jQuery的强大选择器而爱上它的(没错,我就是特别讨厌原生JS的FindElementById),但是何尝不想把一些经常用的链式操作组合写成一个选择器呢?! 从机制上来讲,jQuery的选择符解析器首先会使用一组正则表达式来解析选择器,然后对解析出来的每个选择符执行选择器函数,最后根据true或false来决定是否保留元素. 比如说: $('div:gt(1)') 在jQuery的源文件中是由jQuery.expr[":"] = jQuery.expr.pseudos 对

JQuery插件编写之封装对象

Jquery扩展插件有三大法宝, 1.封装对象方法 (本文详细介绍):对通过选择器获取的jQuery对象进行操作.2.封装全局函数3.选择器插件 jQuery插件的机制: jQuery插件的机制很简单,就是利用jQuery提供的jQuery.fn.extend()和jQuery.extend()方法,扩展jQuery的功能. jQuery.fn.extend()多用于扩展上面提到的3种类型中的第一种,jQuery.extend()用于扩展后两种插件. 废话不多说,自己编写的插件建议命名为jque

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

前面介绍了2篇munin使用的相关文章: [Linux实用工具]Linux监控工具munin的安装和配置 [Linux实用工具]Linux监控工具munin的展示(Nginx) 这次介绍一下munin-node的插件的安装配置和插件的编写. 插件配置 munin-node本身就集成了很多的插件,只需要直接建个软链就可以了.像Nginx.Apach.mysql都是有现成的插件可以使用的. munin的插件默认保存在/etc/munin/plugins里面.进去查看会发现很多软链,软链到/usr/s

【工作笔记】npapi插件编写

虽然chrome已经不再支持npapi插件,不过公司的浏览器外壳是基于低版本的chromium开发,所以由于工作需要,还是学习了一下npapi插件的开发. 此次开发主要参考了以下博客和文档: http://blog.csdn.net/z6482/article/details/7660748 http://mozilla.com.cn/post/21666/ [工作笔记]npapi插件编写,布布扣,bubuko.com

自己动手丰衣足食之征服jQuery插件编写

原文地址:http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html 要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈. 学会使用jQuery并不难,因为它简单易学,并且相信你接触jQuery后肯定也使用或熟悉了不少其插件.如果要将能力上升一个台阶,编写一个属于自己的插件是个不错的选择.

Wireshark插件编写

在抓包的过程中学习了使用wireshark,同时发现wireshark可以进行加载插件,便在网上学习了一下相应的插件开发技术. 需求编写一个私有协议名为SYC,使用UDP端口9877进行传输,报文结构如下: Type Flag Sequence number IP Address Data 编写Wireshark插件,使Wireshark可以识别出SYC协议. 实现首先构造产生SYC协议报文的程序:数据结构: 初始化: 默认向119.75.217.109(baidu.com)发送请求. 发送请求