10. JEB1.5 插件编写二

一些实例

1. 遍历当前光标处函数所有的Element

Java代码:

import java.io.*;

import java.util.List;

import jeb.api.IScript;

import jeb.api.JebInstance;

import jeb.api.ui.*;

import jeb.api.ast.*;

public class Hello implements IScript {

protected JebInstance mJebInstance;

private static File logFile;

private static BufferedWriter writer;

@Override

public void run(JebInstance jebInstance) {

init();

mJebInstance = jebInstance;

// 获取光标所在函数的签名 (Java视图)

String cursorSig = ((CodeView) jebInstance.getUI().getView(View.Type.JAVA)).getCodePosition().getSignature();

// 获取语法树

Method curMethod = jebInstance.getDecompiledMethodTree(cursorSig);

logWrite("current method:" + curMethod.getSignature() + "\r\n");

// 获取方法体

Block body = curMethod.getBody();

logWrite(body.toString() + "\r\n");

for (int i = 0;i < body.size();i++) {

ShowElement(body.get(i),1);

}

close();

}

public void ShowElement(IElement element,int depth) {

printDepth(depth);

logWrite(element.toString() + "\r\n");

List<IElement> list_element = element.getSubElements();

for (IElement e:list_element) {

ShowElement(e,depth + 1);

}

}

public void printDepth(int depth) {

for (int i = 0;i < depth;i++) {

logWrite("  ");

}

}

public void logWrite(String log) {

try {

writer.write(log);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public void init() {

logFile = new File("D:\\log.txt");

try {

writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(logFile), "utf-8"));

} catch (IOException e) {

e.printStackTrace();

}

}

public void close() {

try {

writer.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

我JEB里面打印乱了,只好输出到文件了

执行结果:

2. 遍历所有的方法

@Override

public void run(JebInstance jebInstance) {

Dex dex = jebInstance.getDex();

int methodCount = dex.getMethodCount();

String methodSignature;

for (int i = 0; i < methodCount; i++) {

DexMethod dexMethod = dex.getMethod(i);

methodSignature = dexMethod.getSignature(true);

jebInstance.print(methodSignature);

}

}

3.遍历所有的class

// 遍历所有的类 找到指定的类

List<String> listClassSignatures = dex.getClassSignatures(false);

int index = 0;

boolean isFind = false;

for (String classSignatures:listClassSignatures) {

if (classSignatures.equals(decodeClassSignature)) {

isFind = true;

jebInstance.print("find");

jebInstance.print(classSignatures);

break;

}

index++;

}

if (!isFind) {

close();

return;

}

4. 遍历某个class下所有的直接方法

DexClass dexClass = dex.getClass(index);

DexClassData dexClassData = dexClass.getData();

DexMethodData[] dexMethods = dexClassData.getDirectMethods();

for (int i = 0;i < dexMethods.length;i++) {

int methodIndex = dexMethods[i].getMethodIndex();

DexMethod dexMethod = dex.getMethod(methodIndex);

String methodSignature = dexMethod.getSignature(true);

jebInstance.print(methodSignature);

}

来自为知笔记(Wiz)

时间: 2024-12-14 18:12:36

10. JEB1.5 插件编写二的相关文章

deiphi编写wps office插件(二)

用Delphi开发WpsOffice插件(三):(响应WPS的各种事件):WPSOffice的三大组件,为了方便二次开发,:一.WPS的事件接口:WPSOFFICE的事件是以接口的形式提供的,以:WPS_TLB.PAS中,有applicatio:['{000209FE-0000-4B30-A9:procedureStartup;dispid1:procedu (响应WPS的各种事件) WPS Office的三大组件,为了方便二次开发,都预留了事件接口,不同程序都有不同事件,通过响应不同事件,开发

使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form

使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form 开发环境: Wing IDE 6.1 步骤1: 打开 Wing IDE,创建一个新的 project,保存这个 project 到某个路径下,把之前生产的 py 文件所在的文件夹添加到该 project 中,然后在文件夹下新建一个 py 文件,我这里命名为 PySideTest.py 图中 PySide2ToPySide.py 是一个 PySide2 兼容 PySide 的一个补丁代码,

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

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

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

jquery插件编写学习小结

编写插件的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,方便后期维护和提高开发效率. 一.插件的种类 jQuery的插件主要分为3种类型. 1.封装对象方法的插件 2.封装全局函数的插件 3.选择器插件 这里我们主要讨论第一种插件的开发流程. 封装对象方法的插件: 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进行操作,是最常见的一种插件,有95%以上的插件都是这种类型的插件. 二.插件的基本要点 1.所有对象方法都应当附加到jQuery.fn上,而所