能力值:
( LV2,RANK:10 )
|
-
-
2 楼
好像,超过 v15 就要用 invoke-static/range 这样的语句来调用了
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
额 不行的啊
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
多了一个变量,前面有个参数要改
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
额 是 .locale吗?? 这个我已经改过了 我前面的内容是
aput-object v16, v14, v15
invoke-direct {v13, v14}, Lcom/intrepidusgroup/learner/PinningTrustManager;-><init>([Ljava/lang/String;)V
aput-object v13, v8, v12
const-string v18, "logging"
const-string v17, "test123"
invoke-static/range {v18, v17} ,Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
其中从const-string开始为我自己加的语句
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
[QUOTE=vodga;1229119]额 不行的啊
[/QUOTE]
range 要用 ..
如:invoke-virtual/range {v0 .. v5}
|
能力值:
( LV6,RANK:90 )
|
-
-
7 楼
换个打印方式不就行了,参数太多了,你也可以自己写个静态方法去Log打印一下,在你打印v16的地方直接传入即可。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
额 这个也不行啊。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
望大神指点一二啊。。。
|
能力值:
( LV6,RANK:90 )
|
-
-
10 楼
你在程序中,写一个静态的方法,例如public static void printStr(String str){
Log.v("test",str);
}
再调用一下这个方法。
类似这样的,也可以system.out,然后反编译,把方法放入当前smali中,再需要打印的地方放入反编译后的调用方法,注意Lcom.aa也就是当前smali的类名即可.
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
OK 多谢 来试试
|
能力值:
( LV3,RANK:20 )
|
-
-
12 楼
v17, v16换成 v0 ~ v15 之间的寄存器试试
确保修改寄存器不影响上下文,否则记得改回来即可
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
前面的寄存器是不能用的。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
弄出来了 多谢指点
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
[QUOTE=vodga;1229119]额 不行的啊
[/QUOTE]
这是什么工具,可以检查smali的语法有错的? 求指教。
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
求楼主的工具.
|
能力值:
( LV3,RANK:30 )
|
-
-
17 楼
加入静态方法后的smali是
.method public static printlog(Ljava/lang/String;)V
.locals 1
.param p0, "str" # Ljava/lang/String;
.prologue
.line 27
const-string v0, "KKKK"
invoke-static {v0, p0}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I
.line 28
return-void
.end method
调用它的地方是
# String a="123";
# printlog(a);
.line 22
const-string v0, "123"
.line 23
.local v0, "a":Ljava/lang/String;
invoke-static {v0}, Lcom/kk/WifiC;->printlog(Ljava/lang/String;)V
用的还是 invoke-static,将这段插入别的smali时,又不能直接用V0,改成v20也报错啊,还是只能用v0~v15啊
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
我记得超过13个都不一定能让你引用。
|
能力值:
( LV6,RANK:90 )
|
-
-
19 楼
你看下那个方法有几个变量,你想打印哪个,就传入哪个参数。
如果原方法都没有20个,你传入v20肯定报错的。
这个是传入你需要打印的参数的寄存器。
建议楼主直接写个java代码,输出几个字符串。
不熟练的情况下,不要手动去模仿写smali代码。
例如本帖上面写的
const-string v16, "b57ba656b518a6b145b9a77fabcddcf1f24ed757"
就直接调用
invoke-static {v16}, Lcom/kk/WifiC;->printlog(Ljava/lang/String;)V
即可。
|
能力值:
( LV3,RANK:30 )
|
-
-
20 楼
搞定,仔细观察那个寄存器在补丁位置是没有用的,再就是大于15的先赋值到V0~V15
.line 2073
invoke-virtual/range {v29 .. v29}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v27 #要用log将该值输出,其大于15,后面要先赋值给V1
[COLOR="Red"]# 以下是加入的内容,输出log("KKKKSend",str1)
const-string v0, "KKKKSend" #为啥用V0,因为后面有move-object/from16 v0, v29,所以这里用V0不影响程序
move-object/from16 v1, v27 #同样,V1后面也有用到,不会破会寄存器上下文,所以让V1=V27
invoke-static {v0, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
#[/COLOR]
.line 2075
.local v27, "udp":Ljava/lang/String;
move-object/from16 v0, p0
iget-object v0, v0, Lcom/kk/Activity$Thread;->this$0:Lcom/kk/Activity;
move-object/from16 v29, v0
move-object/from16 v0, v29
iget-object v0, v0, Lcom/kk/Activity;->jnic:Lcom/kk/Wifi;
move-object/from16 v29, v0
.line 2076
invoke-virtual/range {v27 .. v27}, Ljava/lang/String;->length()I
move-result v30
.line 2075
move-object/from16 v0, v29
move-object/from16 v1, v27
move/from16 v2, v30
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
很清晰的思路
|
|
|