如何修改并固定函数的传参

public class XposedManager implements IXposedHookLoadPackage {
    public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
        if(lpparam.packageName.equals("com.bbk.appstore")) {
                XposedHelpers.findAndHookMethod("com.a.b.c", lpparam.classLoader,"a", new XC_MethodHook() {
                    @Override
                    protected void afterHookedMethod(MethodHookParam param)
                            throws Throwable {
                        // TODO Auto-generated method stub

                        String result = "this is your value";
                        param.setResult(result );
                    }
                });
            }
    }

这段代码可以修改函数的返回值,我想修改函数本身的参数值可以吗?比如sum(a)函数中的a 值

这个涉及到是引用传参还是值传参

1.如果是基类型是值传递,在方法中修改参数变量的值不改变调用方入参的值。

如:

有一个方法

calss Test{

public void fun(int a){

a = 11;

}

}

int a;

Test t = new Test();

t.fun(a);

System.out.println("a = " + a);

a = 10;

2.引用传递

class TestParam{

public int a;

}

calss Test{

public void fun(TestParam tp){

tp.a = 11;

}

}

代码:

TestParam tp = new TestParam();

tp.a = 10;

Test t = new Test();

t.fun(tp);

System.out.println("tp.a = ", tp.a);

这时输出tp.a = 11

3.引用本身的变化不影响原来的引用

class TestParam{

public int a;

}

calss Test{

public void fun(TestParam tp){

TestParam tp1  = new TestParam();

tp1.a = 20;

tp = tp1;//这里是把tp的引用改到了tp1,但调用方的引用没有变化。

}

}

代码:

TestParam tp = new TestParam();

tp.a = 10;

Test t = new Test();

t.fun(tp);

System.out.println("tp.a = ", tp.a);

这时输出tp.a = 10

以上三种情况希望有你对你能有帮助。

如果我的回复帮到了你,希望能采纳,并关注我,我会持续发布Java开发的知识。

得看这个MethodHook接口,看有没有Method签名的方法