一些实例
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);
}
- jQuery插件编写及链式编程模型小结
JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQu ...
- jQuery插件编写及链式编程模型
jQuery插件编写及链式编程模型小结 JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我 ...
- 使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form
使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form 开发环境: Wing IDE 6.1 步骤1: 打开 Wing IDE,创建一个新的 pr ...
- 关于chrome插件编写的小结
一个插件的大致目录结构如下: 其中manifest文件最为重要,它定义/指明插件应用的相关信息(权限.版本.功能说明等),点此查看Manifest的详情>> 这里有一篇chrome官方 ...
- BugScan插件编写高(gǎo)级(jī)教程
声明:本文最先发布在:http://q.bugscan.net/t/353 转载请注明出处 有问题可以和我交流 邮件(Medici.Yan@gmail.com) 个人博客地址:http://www.c ...
- (转)jQuery插件编写学习+实例——无限滚动
原文地址:http://www.cnblogs.com/nuller/p/3411627.html 最近自己在搞一个网站,需要用到无限滚动分页,想想工作两年有余了,竟然都没有写过插件,实在惭愧,于是简 ...
- jQuery插件编写学习+实例——无限滚动
最近自己在搞一个网站,需要用到无限滚动分页,想想工作两年有余了,竟然都没有写过插件,实在惭愧,于是简单学习了下jQuery的插件编写,然后分享出来. 先说下基础知识,基本上分为两种,一种是对象级别的插 ...
- jQuery插件编写学习中遇见的问题--attr prop
个人博客: https://chenjiahao.xyz 最近在学习jQuery的插件的编写,有两种方式,$.fn.extend以及$.extend,一种是作用于对象原型上,一种是直接作用于jQuer ...
- jQuery插件编写,
jQuery插件编写 jQuery插件 最近搞jquery插件的编写这里做下笔记 给jquery扩展的方式很多,看的我眼花缭乱 方式1 $.fun=function(){} 方式2 $.fn.fun= ...
随机推荐
- css div垂直居中
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Robot Framework--02 菜单栏&工具栏
转自:http://blog.csdn.net/tulituqi/article/details/7584795 我把RIDE的界面大致分了四个区域:菜单栏.工具栏.案例及资源区.工作区,如下图 菜单 ...
- Linq使用Group By 1
Linq使用Group By 1 1.简单形式: var q = from p in db.Products group p by p.CategoryID into g select g; 语句描述 ...
- Quartz-2D
Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境.我们可以使用Quartz 2D API来实现许多功能,如基本路径的绘制.透明度.描影.绘制阴影.透明层.颜色管理.反锯齿 ...
- PHP 学习
http://www.w3school.com.cn/php/php_sessions.asp public static void chkacc() {Response.Redirect(" ...
- 总结一下安装linux系统经验-版本选择-安装ubuntu
linux版本选择: 初次接触,建议选 Ubuntu 或者 Fedora,这两个发行版都很容易上手,而且两者都有很强大的中文社区,遇到问题比较容易解决,而且都有国内的源,安装或者更新软件时体验相对会好 ...
- Jenkins入门总结
Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目. 2.监控外部调用执行的工作 在网上貌似没有找到Jenkins的中文的太多的文 ...
- 【转】常用的shell脚本
from:http://blog.sina.com.cn/s/blog_4152a9f501013r6c.html 常用的shell脚本 (2012-10-10 22:09:07) 转载▼ 标签: 杂 ...
- java.lang.Class
java.lang.Class 一.Class类是什么 Class是一个类,位于java.lang包下. 在Java中每个类都有一个相对应的Class类的对象,换句话说:Java程序在启动运行时 一个 ...
- hdu4923 Room and Moor
4923Room and Moor Room and Moor Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/2621 ...