java 打印栈回溯_利用Xposed Hook打印Java函数调用堆栈信息的几种方法

在进行Android逆向分析的时候,经常需要进行动态调试栈回溯,查看Java函数的调用流程,Android的smali动态调试又不是很方便,因此使用Android的Java Hook的方法,打印Java函数调用堆栈信息辅助静态分析。

package com.xposeddemo;

import java.util.Map;

import android.util.Log;

import de.robv.android.xposed.IXposedHookLoadPackage;

import de.robv.android.xposed.XC_MethodHook;

import de.robv.android.xposed.XposedBridge;

import de.robv.android.xposed.XposedHelpers;

import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;

public class Module implements IXposedHookLoadPackage {

@Override

public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {

// 判断是否是要Hook的包名

if (lpparam.packageName.equals("com.lenovo.anyshare.gps")){

XposedBridge.log("Loaded App:" + lpparam.packageName);

// 查找要Hook的函数(需要打印堆栈调用的目标函数)

XposedHelpers.findAndHookMethod(

"com.lenovo.anyshare.frv", // 被Hook函数所在的类com.lenovo.anyshare.frv

lpparam.classLoader,

"a", // 被Hook函数的名称a

new XC_MethodHook(){

@Override

protected void beforeHookedMethod(MethodHookParam param)

throws Throwable {

// Hook函数之前执行的代码

//传入参数1

//XposedBridge.log("beforeHookedMethod userName:" + param.args[0]);

}

@Override

protected void afterHookedMethod(MethodHookParam param)

throws Throwable {

// Hook函数之后执行的代码

//函数返回值

//XposedBridge.log("afterHookedMethod result:" + param.getResult());

// 函数调用完成之后打印堆栈调用的信息

// 方法一:

Log.i("

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值