一些实例
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);

}  






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

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

    JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQu ...

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

    jQuery插件编写及链式编程模型小结 JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我 ...

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

    使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form 开发环境: Wing IDE 6.1 步骤1: 打开 Wing IDE,创建一个新的 pr ...

  4. 关于chrome插件编写的小结

    一个插件的大致目录结构如下: 其中manifest文件最为重要,它定义/指明插件应用的相关信息(权限.版本.功能说明等),点此查看Manifest的详情>>   这里有一篇chrome官方 ...

  5. BugScan插件编写高(gǎo)级(jī)教程

    声明:本文最先发布在:http://q.bugscan.net/t/353 转载请注明出处 有问题可以和我交流 邮件(Medici.Yan@gmail.com) 个人博客地址:http://www.c ...

  6. (转)jQuery插件编写学习+实例——无限滚动

    原文地址:http://www.cnblogs.com/nuller/p/3411627.html 最近自己在搞一个网站,需要用到无限滚动分页,想想工作两年有余了,竟然都没有写过插件,实在惭愧,于是简 ...

  7. jQuery插件编写学习+实例——无限滚动

    最近自己在搞一个网站,需要用到无限滚动分页,想想工作两年有余了,竟然都没有写过插件,实在惭愧,于是简单学习了下jQuery的插件编写,然后分享出来. 先说下基础知识,基本上分为两种,一种是对象级别的插 ...

  8. jQuery插件编写学习中遇见的问题--attr prop

    个人博客: https://chenjiahao.xyz 最近在学习jQuery的插件的编写,有两种方式,$.fn.extend以及$.extend,一种是作用于对象原型上,一种是直接作用于jQuer ...

  9. jQuery插件编写,

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

随机推荐

  1. haproxy安装

    最近一直在整理之前用过的东西,现在到haproxy了,安装如下: tar xf haproxy-1.4.27.tar.gz cd haproxy-1.4.27 make TARGET=linux26 ...

  2. 云服务程序在启动的时候执行Powershell脚本

    如果在云服务程序启动时候,需要执行Powershell脚本,我们需要将脚本嵌入到程序中,并且编写一个cmd来执行这个脚本,具体如下: 1.编写测试的Powershell脚本:每隔10分钟 检测dns ...

  3. Python in Unity

    http://stackoverflow.com/questions/11766181/ironpython-in-unity3d

  4. clipboard复制剪贴板功能,以及用requirejs时报错---Uncaught ReferenceError: Clipboard is not defined

    zeroclipboard是走的flash插件,手机浏览器是不支持的,所以不得不舍弃之,用clipboard,clipboard不需要flash就可以完成复制剪切等功能,而且可以兼容pc,移动端,下面 ...

  5. web前端工程师校园招聘要求

    小燕子对紫薇说:“这辈子也别想着进皇宫了”.可后来她们不但进了宫,还都当上了格格.你在想什么?走呗! 1.去哪了网 前端开发工程师 工作地点:北京 工作职责: 负责去哪儿网各产品线Web前端研发: 负 ...

  6. MSSQL数据库链接字符串Asynchronous Processing=true不是异步查询吗,怎么是缓存

    ;Asynchronous Processing=true  不是异步查询吗,怎么是缓存 <!--<add name="default" providerName=&q ...

  7. oarcle数据库导入导出,创建表空间

    oracle导入导出(前提,本机已经安装oracle和oracle客户端)导出命令: exp username/password@192.168.1.138/ORCL file=c:\test.dmp ...

  8. jQuery.validator 验证规则详解

    前言:jQuery.validator是一款非常不错的表单验证插件,验证方式非常简单方便,它还对HTML5做了兼容处理,了解了验证规则,就基本掌握了它的使用,下面就让我一一道来 jQuery.vali ...

  9. JS URL传递中文参数时出现乱码的处理

    在浏览器中显示的地址是这样的: 但是按F12调试的时候的地址却变化掉了: 这个肯定是是因为浏览器对url路径默认编码了.这个问题是在我们去取值的时候,得到的就是后面那一大串稀奇古怪的东西.得不到我们想 ...

  10. [译]View components and Inject in ASP.NET MVC 6

    原文:http://www.asp.net/vnext/overview/aspnet-vnext/vc 介绍view components view components (VCs) 类似于part ...