首页
社区
课程
招聘
[求助]armv7逆向时如何分析参数寄存器?
发表于: 2014-5-14 09:56 8147

[求助]armv7逆向时如何分析参数寄存器?

2014-5-14 09:56
8147
private static native void native_get_test(long arg0, String arg1, int arg2, List arg3, List  arg4, int arg5)

.text:0000B6E8                                         EXPORT Java_com_test_native_1get_1suggestions
.text:0000B6E8                         Java_com_test_native_1get_1suggestions
.text:0000B6E8
.text:0000B6E8                         var_58          = -0x58
.text:0000B6E8                         var_54          = -0x54
.text:0000B6E8                         var_50          = -0x50
.text:0000B6E8                         var_4C          = -0x4C
.text:0000B6E8                         var_44          = -0x44
.text:0000B6E8                         var_38          = -0x38
.text:0000B6E8                         arg_0           =  0
.text:0000B6E8                         arg_4           =  4
.text:0000B6E8                         arg_8           =  8
.text:0000B6E8                         arg_C           =  0xC
.text:0000B6E8                         arg_10          =  0x10
.text:0000B6E8
.text:0000B6E8 F0 B5                                   PUSH    {R4-R7,LR}
.text:0000B6EA 5F 46                                   MOV     R7, R11
.text:0000B6EC 56 46                                   MOV     R6, R10
.text:0000B6EE 4D 46                                   MOV     R5, R9
.text:0000B6F0 44 46                                   MOV     R4, R8
.text:0000B6F2 F0 B4                                   PUSH    {R4-R7}
.text:0000B6F4 8D B0                                   SUB     SP, SP, #0x34
.text:0000B6F6 90 46                                   MOV     R8, R2
.text:0000B6F8 18 9A                                   LDR     R2, [SP,#0x58+arg_8]
.text:0000B6FA 16 9E                                   LDR     R6, [SP,#0x58+arg_0]
.text:0000B6FC A9 23                                   MOVS    R3, #0xA9
.text:0000B6FE 92 46                                   MOV     R10, R2
.text:0000B700 02 68                                   LDR     R2, [R0]
.text:0000B702 9B 00                                   LSLS    R3, R3, #2
.text:0000B704 31 1C                                   MOVS    R1, R6
.text:0000B706 D3 58                                   LDR     R3, [R2,R3]
.text:0000B708 00 22                                   MOVS    R2, #0
.text:0000B70A 04 1C                                   MOVS    R4, R0
.text:0000B70C 98 47                                   BLX     R3

arg0 ->rX?
就是第一个参数放到哪个寄存器中?

text:0000B6E8 F0 B5                                   PUSH    {R4-R7,LR}
arg0 ->R4吗?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 230
活跃值: (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
R0 吧。
当参数小于4个时,ARM 首先会用 R0-R3 四个寄存器来传递参数,当参数个数大于4时,开始使用栈来传递参数.
2014-5-14 12:52
0
雪    币: 335
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
对于参数可变的程序调用, 前四个参数放在r0~r3中传递,如果多于四个参则按相反的顺序进栈保存,所谓相反的顺序是指靠前参数后进栈.
http://blog.csdn.net/pony_maggie/article/details/5270203
r0->arg0
r3->arg3

r4->arg5
r5->arg4
如果以上成立下面在干吗?
.text:0000B6EA 5F 46                                   MOV     R7, R11
.text:0000B6EC 56 46                                   MOV     R6, R10
.text:0000B6EE 4D 46                                   MOV     R5, R9
.text:0000B6F0 44 46                                   MOV     R4, R8
2014-5-14 15:30
0
雪    币: 138
活跃值: (470)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
r4->arg4
r5->arg5
以上不成立
你没明白二楼的意思么

MOV     R7, R11
MOV     R6, R10
MOV     R5, R9
MOV     R4, R8
PUSH    {R4-R7} 这里是保存 R8-R11寄存器的值;
2014-5-14 16:00
0
雪    币: 335
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
R0~R3 param1~param4
请问一下剩下param5~param6参数放哪里?
2014-5-14 16:06
0
雪    币: 138
活跃值: (470)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
二楼已经回答!
2014-5-14 17:22
0
雪    币: 17
活跃值: (1836)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
jint
private static native void native_get_test( JNIEnv*  env,
                                      jobject  obj,
                                                                                long arg0,
                                                                                String arg1,
                                                                                int arg2,
                                                                                List arg3,
                                                                                List  arg4,
                                                                                int arg5 )

        env-xxx(env, arg0,0);



你这个参数很复杂,你的r0 是this 指针,也就是env,不管你写没写,都会带过来,从上面看,你的r2 传过来了,保持了,你r1 被覆盖,传来的没有使用,

到底什么是你的传的第一个参数,如果你是才开始写程序的话,可能你程序写错了,没有写上env变量,

后面五个参数从ida 上看应该是

.text:0000B6E8                         arg_0           =  0
.text:0000B6E8                         arg_4           =  4
.text:0000B6E8                         arg_8           =  8
.text:0000B6E8                         arg_C           =  0xC
.text:0000B6E8                         arg_10          =  0x10

但是这是不对的,如果你的是上面的我那种定义的7个参数的话,你的arg0->r2
从ida 后面来说,你的是对的,5 *4 + 4*4 + 0x34 = 0x58  ,[SP,#0x58+arg_0]  的确对应第一个参数

.text:0000B6F8 18 9A                                   LDR     R2, [SP,#0x58+arg_8]
.text:0000B6FA 16 9E                                   LDR     R6, [SP,#0x58+arg_0]   // 的确对应第一个参数

你给的信息太少了,你能给我bin,我或许能解释你目前的是为什么会这样
2014-5-14 19:27
0
雪    币: 335
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
多谢回答,程序不是我写的。是分析某个apk中的so,由于本论坛有规定要隐藏相关名字只好替换一下:
以下是完整的ida pro代码:
private static native void native_get_suggestions(long arg0, String arg1, int arg2, List arg3, List
             arg4, int arg5)

.text:0000B6E8                                         EXPORT Java_com_test_native_1get_1suggestions
.text:0000B6E8                         Java_com_test_native_1get_1suggestions
.text:0000B6E8
.text:0000B6E8                         var_58          = -0x58
.text:0000B6E8                         var_54          = -0x54
.text:0000B6E8                         var_50          = -0x50
.text:0000B6E8                         var_4C          = -0x4C
.text:0000B6E8                         var_44          = -0x44
.text:0000B6E8                         var_38          = -0x38
.text:0000B6E8                         arg_0           =  0
.text:0000B6E8                         arg_4           =  4
.text:0000B6E8                         arg_8           =  8
.text:0000B6E8                         arg_C           =  0xC
.text:0000B6E8                         arg_10          =  0x10
.text:0000B6E8
.text:0000B6E8 F0 B5                                   PUSH    {R4-R7,LR}
.text:0000B6EA 5F 46                                   MOV     R7, R11
.text:0000B6EC 56 46                                   MOV     R6, R10
.text:0000B6EE 4D 46                                   MOV     R5, R9
.text:0000B6F0 44 46                                   MOV     R4, R8
.text:0000B6F2 F0 B4                                   PUSH    {R4-R7}
.text:0000B6F4 8D B0                                   SUB     SP, SP, #0x34
.text:0000B6F6 90 46                                   MOV     R8, R2
.text:0000B6F8 18 9A                                   LDR     R2, [SP,#0x58+arg_8]
.text:0000B6FA 16 9E                                   LDR     R6, [SP,#0x58+arg_0]
.text:0000B6FC A9 23                                   MOVS    R3, #0xA9
.text:0000B6FE 92 46                                   MOV     R10, R2
.text:0000B700 02 68                                   LDR     R2, [R0]
.text:0000B702 9B 00                                   LSLS    R3, R3, #2
.text:0000B704 31 1C                                   MOVS    R1, R6
.text:0000B706 D3 58                                   LDR     R3, [R2,R3]
.text:0000B708 00 22                                   MOVS    R2, #0
.text:0000B70A 04 1C                                   MOVS    R4, R0
.text:0000B70C 98 47                                   BLX     R3
.text:0000B70C
.text:0000B70E 05 1E                                   SUBS    R5, R0, #0
.text:0000B710 00 D1                                   BNE     loc_B714
.text:0000B710
.text:0000B712 E8 E0                                   B       loc_B8E6
.text:0000B712
.text:0000B714                         ; ---------------------------------------------------------------------------
.text:0000B714
.text:0000B714                         loc_B714                                ; CODE XREF: Java_com_test_native_1get_1suggestions+28j
.text:0000B714 6B 46                                   MOV     R3, SP
.text:0000B716 2C 33                                   ADDS    R3, #0x2C
.text:0000B718 18 1C                                   MOVS    R0, R3
.text:0000B71A 29 1C                                   MOVS    R1, R5
.text:0000B71C 03 93                                   STR     R3, [SP,#0x58+var_4C]
.text:0000B71E FE F7 CC EC                             BLX     Glib::ustring::ustring(char  const*)
.text:0000B71E
.text:0000B722 22 68                                   LDR     R2, [R4]
.text:0000B724 AA 23 9B 00                             MOVS    R3, 0x2A8
.text:0000B728 D3 58                                   LDR     R3, [R2,R3]
.text:0000B72A 20 1C                                   MOVS    R0, R4
.text:0000B72C 31 1C                                   MOVS    R1, R6
.text:0000B72E 2A 1C                                   MOVS    R2, R5
.text:0000B730 98 47                                   BLX     R3
.text:0000B730
.text:0000B732 00 23                                   MOVS    R3, #0
.text:0000B734 08 AE                                   ADD     R6, SP, #0x58+var_38
.text:0000B736 05 AF                                   ADD     R7, SP, #0x58+var_44
.text:0000B738 73 60                                   STR     R3, [R6,#4]
.text:0000B73A B3 60                                   STR     R3, [R6,#8]
.text:0000B73C 7B 60                                   STR     R3, [R7,#4]
.text:0000B73E BB 60                                   STR     R3, [R7,#8]
.text:0000B740 08 93                                   STR     R3, [SP,#0x58+var_38]
.text:0000B742 05 93                                   STR     R3, [SP,#0x58+var_44]
.text:0000B744 1A 9B                                   LDR     R3, [SP,#0x58+arg_10]
.text:0000B746 40 46                                   MOV     R0, R8
.text:0000B748 03 99                                   LDR     R1, [SP,#0x58+var_4C]
.text:0000B74A 01 93                                   STR     R3, [SP,#0x58+var_54]
.text:0000B74C 17 9A                                   LDR     R2, [SP,#0x58+arg_4]
.text:0000B74E 33 1C                                   MOVS    R3, R6
.text:0000B750 00 97                                   STR     R7, [SP,#0x58+var_58]
.text:0000B752 01 F0 EF F8                             BL      mw::SearchIndex::getSuggestions(Glib::ustring  const&,uint,std::vector<Glib::ustring,std::allocator<Glib::ustring>> &,std::vector&<int,std::allocator<int>>,uint)
.text:0000B752
.text:0000B756 23 68                                   LDR     R3, [R4]
.text:0000B758 88 49                                   LDR     R1, =(s->JavaUtilList - 0xB762)
.text:0000B75A 20 1C                                   MOVS    R0, R4
.text:0000B75C 9B 69                                   LDR     R3, [R3,#0x18]
.text:0000B75E 79 44                                   ADD     R1, PC          ; "java/util/List"
.text:0000B760 98 47                                   BLX     R3
.text:0000B760
.text:0000B762 80 46                                   MOV     R8, R0
.text:0000B764 00 28                                   CMP     R0, #0
.text:0000B766 00 D1                                   BNE     loc_B76A
.text:0000B766
.text:0000B768 C7 E0                                   B       loc_B8FA
.text:0000B768
.text:0000B76A                         ; ---------------------------------------------------------------------------
.text:0000B76A
.text:0000B76A                         loc_B76A                                ; CODE XREF: Java_com_test_native_1get_1suggestions+7Ej
.text:0000B76A 20 68                                   LDR     R0, [R4]
.text:0000B76C 84 4A                                   LDR     R2, =(s->Clear - 0xB778)
.text:0000B76E 85 4B                                   LDR     R3, =(s->V - 0xB77A)
.text:0000B770 84 21                                   MOVS    R1, #0x84
.text:0000B772 45 58                                   LDR     R5, [R0,R1]
.text:0000B774 7A 44                                   ADD     R2, PC          ; "clear"
.text:0000B776 7B 44                                   ADD     R3, PC          ; "()V"
.text:0000B778 20 1C                                   MOVS    R0, R4
.text:0000B77A 41 46                                   MOV     R1, R8
.text:0000B77C A8 47                                   BLX     R5
.text:0000B77C
.text:0000B77E 02 1E                                   SUBS    R2, R0, #0
.text:0000B780 00 D1                                   BNE     loc_B784
.text:0000B780
.text:0000B782 C4 E0                                   B       loc_B90E
.text:0000B782
.text:0000B784                         ; ---------------------------------------------------------------------------
.text:0000B784
.text:0000B784                         loc_B784                                ; CODE XREF: Java_com_test_native_1get_1suggestions+98j
.text:0000B784 20 1C                                   MOVS    R0, R4
.text:0000B786 51 46                                   MOV     R1, R10
.text:0000B788 FF F7 56 FD                             BL      _JNIEnv::CallVoidMethod(_jobject *,_jmethodID *,...)
.text:0000B788
.text:0000B78C 20 68                                   LDR     R0, [R4]
.text:0000B78E 7E 4A                                   LDR     R2, =(s->Add - 0xB79A)
.text:0000B790 7E 4B                                   LDR     R3, =(s->LjavaLangObjectZ - 0xB79C)
.text:0000B792 84 21                                   MOVS    R1, #0x84
.text:0000B794 45 58                                   LDR     R5, [R0,R1]
.text:0000B796 7A 44                                   ADD     R2, PC          ; "add"
.text:0000B798 7B 44                                   ADD     R3, PC          ; "(Ljava/lang/Object;)Z"
.text:0000B79A 20 1C                                   MOVS    R0, R4
.text:0000B79C 41 46                                   MOV     R1, R8
.text:0000B79E A8 47                                   BLX     R5
.text:0000B79E
.text:0000B7A0 81 46                                   MOV     R9, R0
.text:0000B7A2 00 28                                   CMP     R0, #0
.text:0000B7A4 00 D1                                   BNE     loc_B7A8
.text:0000B7A4
.text:0000B7A6 BC E0                                   B       loc_B922
.text:0000B7A6
.text:0000B7A8                         ; ---------------------------------------------------------------------------
.text:0000B7A8
.text:0000B7A8                         loc_B7A8                                ; CODE XREF: Java_com_test_native_1get_1suggestions+BCj
.text:0000B7A8 A7 22                                   MOVS    R2, #0xA7
.text:0000B7AA 93 00                                   LSLS    R3, R2, #2
.text:0000B7AC 08 9D                                   LDR     R5, [SP,#0x58+var_38]
.text:0000B7AE 98 46                                   MOV     R8, R3
.text:0000B7B0 11 E0                                   B       loc_B7D6
.text:0000B7B0
.text:0000B7B2                         ; ---------------------------------------------------------------------------
.text:0000B7B2
.text:0000B7B2                         loc_B7B2                                ; CODE XREF: Java_com_test_native_1get_1suggestions+F2j
.text:0000B7B2 28 1C                                   MOVS    R0, R5
.text:0000B7B4 FE F7 AE EE                             BLX     Glib::ustring::c_str(void)
.text:0000B7B4
.text:0000B7B8 23 68                                   LDR     R3, [R4]
.text:0000B7BA 42 46                                   MOV     R2, R8
.text:0000B7BC 01 1C                                   MOVS    R1, R0
.text:0000B7BE 9B 58                                   LDR     R3, [R3,R2]
.text:0000B7C0 20 1C                                   MOVS    R0, R4
.text:0000B7C2 98 47                                   BLX     R3
.text:0000B7C2
.text:0000B7C4 03 1E                                   SUBS    R3, R0, #0
.text:0000B7C6 00 D1                                   BNE     loc_B7CA
.text:0000B7C6
.text:0000B7C8 88 E0                                   B       loc_B8DC
.text:0000B7C8
.text:0000B7CA                         ; ---------------------------------------------------------------------------
.text:0000B7CA
.text:0000B7CA                         loc_B7CA                                ; CODE XREF: Java_com_test_native_1get_1suggestions+DEj
.text:0000B7CA 20 1C                                   MOVS    R0, R4
.text:0000B7CC 51 46                                   MOV     R1, R10
.text:0000B7CE 4A 46                                   MOV     R2, R9
.text:0000B7D0 FF F7 52 FD                             BL      _JNIEnv::CallBooleanMethod(_jobject *,_jmethodID *,...)
.text:0000B7D0
.text:0000B7D4 04 35                                   ADDS    R5, #4
.text:0000B7D4
.text:0000B7D6
.text:0000B7D6                         loc_B7D6                                ; CODE XREF: Java_com_test_native_1get_1suggestions+C8j
.text:0000B7D6 73 68                                   LDR     R3, [R6,#4]
.text:0000B7D8 AB 42                                   CMP     R3, R5
.text:0000B7DA EA D1                                   BNE     loc_B7B2
.text:0000B7DA
.text:0000B7DC
.text:0000B7DC                         loc_B7DC                                ; CODE XREF: Java_com_test_native_1get_1suggestions+1FCj
.text:0000B7DC                                                                 ; Java_com_test_native_1get_1suggestions+21Aj
.text:0000B7DC                                                                 ; Java_com_test_native_1get_1suggestions+22Ej
.text:0000B7DC                                                                 ; Java_com_test_native_1get_1suggestions+242j
.text:0000B7DC 23 68                                   LDR     R3, [R4]
.text:0000B7DE 6C 49                                   LDR     R1, =(s->JavaUtilList - 0xB7E8)
.text:0000B7E0 20 1C                                   MOVS    R0, R4
.text:0000B7E2 9B 69                                   LDR     R3, [R3,#0x18]
.text:0000B7E4 79 44                                   ADD     R1, PC          ; "java/util/List"
.text:0000B7E6 98 47                                   BLX     R3
.text:0000B7E6
.text:0000B7E8 05 1E                                   SUBS    R5, R0, #0
.text:0000B7EA 00 D1                                   BNE     loc_B7EE
.text:0000B7EA
.text:0000B7EC 80 E0                                   B       loc_B8F0
.text:0000B7EC
.text:0000B7EE                         ; ---------------------------------------------------------------------------
.text:0000B7EE
.text:0000B7EE                         loc_B7EE                                ; CODE XREF: Java_com_test_native_1get_1suggestions+102j
.text:0000B7EE 20 68                                   LDR     R0, [R4]
.text:0000B7F0 84 21                                   MOVS    R1, #0x84
.text:0000B7F2 68 4A                                   LDR     R2, =(s->Clear - 0xB7FC)
.text:0000B7F4 41 58                                   LDR     R1, [R0,R1]
.text:0000B7F6 68 4B                                   LDR     R3, =(s->V - 0xB800)
.text:0000B7F8 7A 44                                   ADD     R2, PC          ; "clear"
.text:0000B7FA 8C 46                                   MOV     R12, R1
.text:0000B7FC 7B 44                                   ADD     R3, PC          ; "()V"
.text:0000B7FE 20 1C                                   MOVS    R0, R4
.text:0000B800 29 1C                                   MOVS    R1, R5
.text:0000B802 E0 47                                   BLX     R12
.text:0000B802
.text:0000B804 02 1E                                   SUBS    R2, R0, #0
.text:0000B806 00 D1                                   BNE     loc_B80A
.text:0000B806
.text:0000B808 7C E0                                   B       loc_B904
.text:0000B808
.text:0000B80A                         ; ---------------------------------------------------------------------------
.text:0000B80A
.text:0000B80A                         loc_B80A                                ; CODE XREF: Java_com_test_native_1get_1suggestions+11Ej
.text:0000B80A 20 1C                                   MOVS    R0, R4
.text:0000B80C 19 99                                   LDR     R1, [SP,#0x58+arg_C]
.text:0000B80E FF F7 13 FD                             BL      _JNIEnv::CallVoidMethod(_jobject *,_jmethodID *,...)
.text:0000B80E
.text:0000B812 20 68                                   LDR     R0, [R4]
.text:0000B814 84 21                                   MOVS    R1, #0x84
.text:0000B816 61 4A                                   LDR     R2, =(s->Add - 0xB820)
.text:0000B818 41 58                                   LDR     R1, [R0,R1]
.text:0000B81A 61 4B                                   LDR     R3, =(s->LjavaLangObjectZ - 0xB824)
.text:0000B81C 7A 44                                   ADD     R2, PC          ; "add"
.text:0000B81E 8C 46                                   MOV     R12, R1
.text:0000B820 7B 44                                   ADD     R3, PC          ; "(Ljava/lang/Object;)Z"
.text:0000B822 20 1C                                   MOVS    R0, R4
.text:0000B824 29 1C                                   MOVS    R1, R5
.text:0000B826 E0 47                                   BLX     R12
.text:0000B826
.text:0000B828 83 46                                   MOV     R11, R0
.text:0000B82A 00 28                                   CMP     R0, #0
.text:0000B82C 00 D1                                   BNE     loc_B830
.text:0000B82C
.text:0000B82E 73 E0                                   B       loc_B918
.text:0000B82E
.text:0000B830                         ; ---------------------------------------------------------------------------
.text:0000B830
.text:0000B830                         loc_B830                                ; CODE XREF: Java_com_test_native_1get_1suggestions+144j
.text:0000B830 23 68                                   LDR     R3, [R4]
.text:0000B832 5C 49                                   LDR     R1, =(s->JavaLangInteger - 0xB83C)
.text:0000B834 20 1C                                   MOVS    R0, R4
.text:0000B836 9B 69                                   LDR     R3, [R3,#0x18]
.text:0000B838 79 44                                   ADD     R1, PC          ; "java/lang/Integer"
.text:0000B83A 98 47                                   BLX     R3
.text:0000B83A
.text:0000B83C 81 46                                   MOV     R9, R0
.text:0000B83E 5A 4A                                   LDR     R2, =(s->Valueof - 0xB84E)
.text:0000B840 20 68                                   LDR     R0, [R4]
.text:0000B842 5A 4B                                   LDR     R3, =(s->ILjavaLangInteger - 0xB850)
.text:0000B844 E2 21 49 00                             MOVS    R1, 0x1C4
.text:0000B848 45 58                                   LDR     R5, [R0,R1]
.text:0000B84A 7A 44                                   ADD     R2, PC          ; "valueOf"
.text:0000B84C 7B 44                                   ADD     R3, PC          ; "(I)Ljava/lang/Integer;"
.text:0000B84E 20 1C                                   MOVS    R0, R4
.text:0000B850 49 46                                   MOV     R1, R9
.text:0000B852 A8 47                                   BLX     R5
.text:0000B852
.text:0000B854 02 90                                   STR     R0, [SP,#0x58+var_50]
.text:0000B856 20 68                                   LDR     R0, [R4]
.text:0000B858 55 4A                                   LDR     R2, =(s->Intvalue - 0xB864)
.text:0000B85A 56 4B                                   LDR     R3, =(s->I - 0xB866)
.text:0000B85C 84 21                                   MOVS    R1, #0x84
.text:0000B85E 45 58                                   LDR     R5, [R0,R1]
.text:0000B860 7A 44                                   ADD     R2, PC          ; "intValue"
.text:0000B862 7B 44                                   ADD     R3, PC          ; "()I"
.text:0000B864 20 1C                                   MOVS    R0, R4
.text:0000B866 49 46                                   MOV     R1, R9
.text:0000B868 A8 47                                   BLX     R5
.text:0000B868
.text:0000B86A 82 46                                   MOV     R10, R0
.text:0000B86C 00 28                                   CMP     R0, #0
.text:0000B86E 5D D0                                   BEQ     loc_B92C
.text:0000B86E
.text:0000B870 05 9D                                   LDR     R5, [SP,#0x58+var_44]
.text:0000B872 11 E0                                   B       loc_B898
.text:0000B872
.text:0000B874                         ; ---------------------------------------------------------------------------
.text:0000B874
.text:0000B874                         loc_B874                                ; CODE XREF: Java_com_test_native_1get_1suggestions+1B4j
.text:0000B874 08 CD                                   LDMIA   R5!, {R3}
.text:0000B876 20 1C                                   MOVS    R0, R4
.text:0000B878 49 46                                   MOV     R1, R9
.text:0000B87A 02 9A                                   LDR     R2, [SP,#0x58+var_50]
.text:0000B87C FF F7 0C FD                             BL      _JNIEnv::CallStaticObjectMethod(_jclass *,_jmethodID *,...)
.text:0000B87C
.text:0000B880 80 46                                   MOV     R8, R0
.text:0000B882 41 46                                   MOV     R1, R8
.text:0000B884 20 1C                                   MOVS    R0, R4
.text:0000B886 52 46                                   MOV     R2, R10
.text:0000B888 FF F7 16 FD                             BL      _JNIEnv::CallIntMethod(_jobject *,_jmethodID *,...)
.text:0000B888
.text:0000B88C 20 1C                                   MOVS    R0, R4
.text:0000B88E 19 99                                   LDR     R1, [SP,#0x58+arg_C]
.text:0000B890 5A 46                                   MOV     R2, R11
.text:0000B892 43 46                                   MOV     R3, R8
.text:0000B894 FF F7 F0 FC                             BL      _JNIEnv::CallBooleanMethod(_jobject *,_jmethodID *,...)
.text:0000B894
.text:0000B898
.text:0000B898                         loc_B898                                ; CODE XREF: Java_com_test_native_1get_1suggestions+18Aj
.text:0000B898 7B 68                                   LDR     R3, [R7,#4]
.text:0000B89A AB 42                                   CMP     R3, R5
.text:0000B89C EA D1                                   BNE     loc_B874
.text:0000B89C
.text:0000B89E
.text:0000B89E                         loc_B89E                                ; CODE XREF: Java_com_test_native_1get_1suggestions+210j
.text:0000B89E                                                                 ; Java_com_test_native_1get_1suggestions+224j
.text:0000B89E                                                                 ; Java_com_test_native_1get_1suggestions+238j
.text:0000B89E                                                                 ; Java_com_test_native_1get_1suggestions+24Cj
.text:0000B89E 05 98                                   LDR     R0, [SP,#0x58+var_44] ; void *
.text:0000B8A0 00 28                                   CMP     R0, #0
.text:0000B8A2 01 D0                                   BEQ     loc_B8A8
.text:0000B8A2
.text:0000B8A4 3E F0 32 EB                             BLX     operator delete(void *)
.text:0000B8A4
.text:0000B8A8
.text:0000B8A8                         loc_B8A8                                ; CODE XREF: Java_com_test_native_1get_1suggestions+1BAj
.text:0000B8A8 08 9C                                   LDR     R4, [SP,#0x58+var_38]
.text:0000B8AA 75 68                                   LDR     R5, [R6,#4]
.text:0000B8AC AC 42                                   CMP     R4, R5
.text:0000B8AE 06 D0                                   BEQ     loc_B8BE
.text:0000B8AE
.text:0000B8B0
.text:0000B8B0                         loc_B8B0                                ; CODE XREF: Java_com_test_native_1get_1suggestions+1D2j
.text:0000B8B0 20 1C                                   MOVS    R0, R4
.text:0000B8B2 FE F7 5C EC                             BLX     Glib::ustring::~ustring()
.text:0000B8B2
.text:0000B8B6 04 34                                   ADDS    R4, #4
.text:0000B8B8 A5 42                                   CMP     R5, R4
.text:0000B8BA F9 D1                                   BNE     loc_B8B0
.text:0000B8BA
.text:0000B8BC 08 9D                                   LDR     R5, [SP,#0x58+var_38]
.text:0000B8BC
.text:0000B8BE
.text:0000B8BE                         loc_B8BE                                ; CODE XREF: Java_com_test_native_1get_1suggestions+1C6j
.text:0000B8BE 00 2D                                   CMP     R5, #0
.text:0000B8C0 02 D0                                   BEQ     loc_B8C8
.text:0000B8C0
.text:0000B8C2 28 1C                                   MOVS    R0, R5          ; void *
.text:0000B8C4 3E F0 22 EB                             BLX     operator delete(void *)
.text:0000B8C4
.text:0000B8C8
.text:0000B8C8                         loc_B8C8                                ; CODE XREF: Java_com_test_native_1get_1suggestions+1D8j
.text:0000B8C8 03 98                                   LDR     R0, [SP,#0x58+var_4C]
.text:0000B8CA FE F7 50 EC                             BLX     Glib::ustring::~ustring()
.text:0000B8CA
.text:0000B8CE
.text:0000B8CE                         loc_B8CE                                ; CODE XREF: Java_com_test_native_1get_1suggestions+206j
.text:0000B8CE 0D B0                                   ADD     SP, SP, #0x34
.text:0000B8D0 3C BC                                   POP     {R2-R5}
.text:0000B8D2 90 46                                   MOV     R8, R2
.text:0000B8D4 99 46                                   MOV     R9, R3
.text:0000B8D6 A2 46                                   MOV     R10, R4
.text:0000B8D8 AB 46                                   MOV     R11, R5
.text:0000B8DA F0 BD                                   POP     {R4-R7,PC}
.text:0000B8DA
.text:0000B8DC                         ; ---------------------------------------------------------------------------
.text:0000B8DC
.text:0000B8DC                         loc_B8DC                                ; CODE XREF: Java_com_test_native_1get_1suggestions+E0j
.text:0000B8DC 36 48                                   LDR     R0, =(s->OutOfMemory - 0xB8E2)
.text:0000B8DE 78 44                                   ADD     R0, PC          ; "Out of memory"
.text:0000B8E0 00 F0 FC F9                             BL      mw::LOGE(char  const*,...)
.text:0000B8E0
.text:0000B8E4 7A E7                                   B       loc_B7DC
.text:0000B8E4
.text:0000B8E6                         ; ---------------------------------------------------------------------------
.text:0000B8E6
.text:0000B8E6                         loc_B8E6                                ; CODE XREF: Java_com_test_native_1get_1suggestions+2Aj
.text:0000B8E6 35 48                                   LDR     R0, =(s->OutOfMemory - 0xB8EC)
.text:0000B8E8 78 44                                   ADD     R0, PC          ; "Out of memory"
.text:0000B8EA 00 F0 F7 F9                             BL      mw::LOGE(char  const*,...)
.text:0000B8EA
.text:0000B8EE EE E7                                   B       loc_B8CE
.text:0000B8EE
.text:0000B8F0                         ; ---------------------------------------------------------------------------
.text:0000B8F0
.text:0000B8F0                         loc_B8F0                                ; CODE XREF: Java_com_test_native_1get_1suggestions+104j
.text:0000B8F0 33 48                                   LDR     R0, =(s->CanTFindClass - 0xB8F6)
.text:0000B8F2 78 44                                   ADD     R0, PC          ; "Can't find class"
.text:0000B8F4 00 F0 F2 F9                             BL      mw::LOGE(char  const*,...)
.text:0000B8F4
.text:0000B8F8 D1 E7                                   B       loc_B89E
.text:0000B8F8
.text:0000B8FA                         ; ---------------------------------------------------------------------------
.text:0000B8FA
.text:0000B8FA                         loc_B8FA                                ; CODE XREF: Java_com_test_native_1get_1suggestions+80j
.text:0000B8FA 32 48                                   LDR     R0, =(s->CanTFindClass - 0xB900)
.text:0000B8FC 78 44                                   ADD     R0, PC          ; "Can't find class"
.text:0000B8FE 00 F0 ED F9                             BL      mw::LOGE(char  const*,...)
.text:0000B8FE
.text:0000B902 6B E7                                   B       loc_B7DC
.text:0000B902
.text:0000B904                         ; ---------------------------------------------------------------------------
.text:0000B904
.text:0000B904                         loc_B904                                ; CODE XREF: Java_com_test_native_1get_1suggestions+120j
.text:0000B904 30 48                                   LDR     R0, =(s->CanTFindMethodClear - 0xB90A)
.text:0000B906 78 44                                   ADD     R0, PC          ; "Can't find method clear"
.text:0000B908 00 F0 E8 F9                             BL      mw::LOGE(char  const*,...)
.text:0000B908
.text:0000B90C C7 E7                                   B       loc_B89E
.text:0000B90C
.text:0000B90E                         ; ---------------------------------------------------------------------------
.text:0000B90E
.text:0000B90E                         loc_B90E                                ; CODE XREF: Java_com_test_native_1get_1suggestions+9Aj
.text:0000B90E 2F 48                                   LDR     R0, =(s->CanTFindMethodClear - 0xB914)
.text:0000B910 78 44                                   ADD     R0, PC          ; "Can't find method clear"
.text:0000B912 00 F0 E3 F9                             BL      mw::LOGE(char  const*,...)
.text:0000B912
.text:0000B916 61 E7                                   B       loc_B7DC
.text:0000B916
.text:0000B918                         ; ---------------------------------------------------------------------------
.text:0000B918
.text:0000B918                         loc_B918                                ; CODE XREF: Java_com_test_native_1get_1suggestions+146j
.text:0000B918 2D 48                                   LDR     R0, =(s->CanTFindMethodAdd - 0xB91E)
.text:0000B91A 78 44                                   ADD     R0, PC          ; "Can't find method add"
.text:0000B91C 00 F0 DE F9                             BL      mw::LOGE(char  const*,...)
.text:0000B91C
.text:0000B920 BD E7                                   B       loc_B89E
.text:0000B920
.text:0000B922                         ; ---------------------------------------------------------------------------
.text:0000B922
.text:0000B922                         loc_B922                                ; CODE XREF: Java_com_test_native_1get_1suggestions+BEj
.text:0000B922 2C 48                                   LDR     R0, =(s->CanTFindMethodAdd - 0xB928)
.text:0000B924 78 44                                   ADD     R0, PC          ; "Can't find method add"
.text:0000B926 00 F0 D9 F9                             BL      mw::LOGE(char  const*,...)
.text:0000B926
.text:0000B92A 57 E7                                   B       loc_B7DC
.text:0000B92A
.text:0000B92C                         ; ---------------------------------------------------------------------------
.text:0000B92C
.text:0000B92C                         loc_B92C                                ; CODE XREF: Java_com_test_native_1get_1suggestions+186j
.text:0000B92C 2A 48                                   LDR     R0, =(s->CanTFindMethodIntvalue - 0xB932)
.text:0000B92E 78 44                                   ADD     R0, PC          ; "Can't find method intValue"
.text:0000B930 00 F0 D4 F9                             BL      mw::LOGE(char  const*,...)
.text:0000B930
.text:0000B934 B3 E7                                   B       loc_B89E
.text:0000B934
.text:0000B934                         ; End of function Java_com_test_native_1get_1suggestions
.text:0000B934
.text:0000B936                         ; ---------------------------------------------------------------------------
.text:0000B936
.text:0000B936                         loc_B936                                ; CODE XREF: .text:0000B970j
.text:0000B936 07 1C                                   MOVS    R7, R0
.text:0000B938 08 98                                   LDR     R0, [SP,#0x20]
.text:0000B93A 00 28                                   CMP     R0, #0
.text:0000B93C 01 D0                                   BEQ     loc_B942
.text:0000B93C
.text:0000B93E
.text:0000B93E                         loc_B93E                                ; CODE XREF: .text:0000B976j
.text:0000B93E 3E F0 E6 EA                             BLX     operator delete(void *)
.text:0000B93E
.text:0000B942
.text:0000B942                         loc_B942                                ; CODE XREF: .text:0000B93Cj
.text:0000B942                                                                 ; .text:0000B96Ej
.text:0000B942                                                                 ; .text:0000B978j
.text:0000B942 03 98                                   LDR     R0, [SP,#0xC]
.text:0000B944 FE F7 12 EC                             BLX     Glib::ustring::~ustring()
.text:0000B944
.text:0000B948 38 1C                                   MOVS    R0, R7
.text:0000B94A 3E F0 AA ED                             BLX     __cxa_end_cleanup
.text:0000B94A
.text:0000B94E                         ; ---------------------------------------------------------------------------
.text:0000B94E 07 1C                                   MOVS    R7, R0
.text:0000B950 05 98                                   LDR     R0, [SP,#0x14]
.text:0000B952 00 28                                   CMP     R0, #0
.text:0000B954 01 D0                                   BEQ     loc_B95A
.text:0000B954
.text:0000B956 3E F0 DA EA                             BLX     operator delete(void *)
.text:0000B956
.text:0000B95A
.text:0000B95A                         loc_B95A                                ; CODE XREF: .text:0000B954j
.text:0000B95A 08 9C                                   LDR     R4, [SP,#0x20]
.text:0000B95C 75 68                                   LDR     R5, [R6,#4]
.text:0000B95C
.text:0000B95E
.text:0000B95E                         loc_B95E                                ; CODE XREF: .text:0000B96Aj
.text:0000B95E A5 42                                   CMP     R5, R4
.text:0000B960 07 D0                                   BEQ     loc_B972
.text:0000B960
.text:0000B962 20 1C                                   MOVS    R0, R4
.text:0000B964 FE F7 02 EC                             BLX     Glib::ustring::~ustring()
.text:0000B964
.text:0000B968 04 34                                   ADDS    R4, #4
.text:0000B96A F8 E7                                   B       loc_B95E
.text:0000B96A
.text:0000B96C                         ; ---------------------------------------------------------------------------
.text:0000B96C 07 1C                                   MOVS    R7, R0
.text:0000B96E E8 E7                                   B       loc_B942
.text:0000B96E
.text:0000B970                         ; ---------------------------------------------------------------------------
.text:0000B970 E1 E7                                   B       loc_B936
.text:0000B970
.text:0000B972                         ; ---------------------------------------------------------------------------
.text:0000B972
.text:0000B972                         loc_B972                                ; CODE XREF: .text:0000B960j
.text:0000B972 08 98                                   LDR     R0, [SP,#0x20]
.text:0000B974 00 28                                   CMP     R0, #0
.text:0000B976 E2 D1                                   BNE     loc_B93E
.text:0000B976
.text:0000B978 E3 E7                                   B       loc_B942
.text:0000B978
.text:0000B978                         ; ---------------------------------------------------------------------------
.text:0000B97A C0 46                                   ALIGN 4
.text:0000B97C 8A C9 04 00             off_B97C        DCD s->JavaUtilList - 0xB762
.text:0000B97C                                                                 ; DATA XREF: Java_com_test_native_1get_1suggestions+70r
.text:0000B97C                                                                 ; "java/util/List"
.text:0000B980 84 C9 04 00             off_B980        DCD s->Clear - 0xB778   ; DATA XREF: Java_com_test_native_1get_1suggestions+84r
.text:0000B980                                                                 ; "clear"
.text:0000B984 8A C9 04 00             off_B984        DCD s->V - 0xB77A       ; DATA XREF: Java_com_test_native_1get_1suggestions+86r
.text:0000B984                                                                 ; "()V"
.text:0000B988 86 C9 04 00             off_B988        DCD s->Add - 0xB79A     ; DATA XREF: Java_com_test_native_1get_1suggestions+A6r
.text:0000B988                                                                 ; "add"
.text:0000B98C 88 C9 04 00             off_B98C        DCD s->LjavaLangObjectZ - 0xB79C
.text:0000B98C                                                                 ; DATA XREF: Java_com_test_native_1get_1suggestions+A8r
.text:0000B98C                                                                 ; "(Ljava/lang/Object;)Z"
.text:0000B990 04 C9 04 00             off_B990        DCD s->JavaUtilList - 0xB7E8
.text:0000B990                                                                 ; DATA XREF: Java_com_test_native_1get_1suggestions+F6r
.text:0000B990                                                                 ; "java/util/List"
.text:0000B994 00 C9 04 00             off_B994        DCD s->Clear - 0xB7FC   ; DATA XREF: Java_com_test_native_1get_1suggestions+10Ar
.text:0000B994                                                                 ; "clear"
.text:0000B998 04 C9 04 00             off_B998        DCD s->V - 0xB800       ; DATA XREF: Java_com_test_native_1get_1suggestions+10Er
.text:0000B998                                                                 ; "()V"
.text:0000B99C 00 C9 04 00             off_B99C        DCD s->Add - 0xB820     ; DATA XREF: Java_com_test_native_1get_1suggestions+12Er
.text:0000B99C                                                                 ; "add"
.text:0000B9A0 00 C9 04 00             off_B9A0        DCD s->LjavaLangObjectZ - 0xB824
.text:0000B9A0                                                                 ; DATA XREF: Java_com_test_native_1get_1suggestions+132r
.text:0000B9A0                                                                 ; "(Ljava/lang/Object;)Z"
.text:0000B9A4 18 C9 04 00             off_B9A4        DCD s->JavaLangInteger - 0xB83C
.text:0000B9A4                                                                 ; DATA XREF: Java_com_test_native_1get_1suggestions+14Ar
.text:0000B9A4                                                                 ; "java/lang/Integer"
.text:0000B9A8 1A C9 04 00             off_B9A8        DCD s->Valueof - 0xB84E ; DATA XREF: Java_com_test_native_1get_1suggestions+156r
.text:0000B9A8                                                                 ; "valueOf"
.text:0000B9AC 20 C9 04 00             off_B9AC        DCD s->ILjavaLangInteger - 0xB850
.text:0000B9AC                                                                 ; DATA XREF: Java_com_test_native_1get_1suggestions+15Ar
.text:0000B9AC                                                                 ; "(I)Ljava/lang/Integer;"
.text:0000B9B0 24 C9 04 00             off_B9B0        DCD s->Intvalue - 0xB864
.text:0000B9B0                                                                 ; DATA XREF: Java_com_test_native_1get_1suggestions+170r
.text:0000B9B0                                                                 ; "intValue"
.text:0000B9B4 2E C9 04 00             off_B9B4        DCD s->I - 0xB866       ; DATA XREF: Java_com_test_native_1get_1suggestions+172r
.text:0000B9B4                                                                 ; "()I"
.text:0000B9B8 EE C7 04 00             off_B9B8        DCD s->OutOfMemory - 0xB8E2
.text:0000B9B8                                                                 ; DATA XREF: Java_com_test_native_1get_1suggestions:loc_B8DCr
.text:0000B9B8                                                                 ; "Out of memory"
.text:0000B9BC E4 C7 04 00             off_B9BC        DCD s->OutOfMemory - 0xB8EC
.text:0000B9BC                                                                 ; DATA XREF: Java_com_test_native_1get_1suggestions:loc_B8E6r
.text:0000B9BC                                                                 ; "Out of memory"
.text:0000B9C0 42 C7 04 00             off_B9C0        DCD s->CanTFindClass - 0xB8F6
.text:0000B9C0                                                                 ; DATA XREF: Java_com_test_native_1get_1suggestions:loc_B8F0r
.text:0000B9C0                                                                 ; "Can't find class"
.text:0000B9C4 38 C7 04 00             off_B9C4        DCD s->CanTFindClass - 0xB900
.text:0000B9C4                                                                 ; DATA XREF: Java_com_test_native_1get_1suggestions:loc_B8FAr
.text:0000B9C4                                                                 ; "Can't find class"
.text:0000B9C8 FE C7 04 00             off_B9C8        DCD s->CanTFindMethodClear - 0xB90A
.text:0000B9C8                                                                 ; DATA XREF: Java_com_test_native_1get_1suggestions:loc_B904r
.text:0000B9C8                                                                 ; "Can't find method clear"
.text:0000B9CC F4 C7 04 00             off_B9CC        DCD s->CanTFindMethodClear - 0xB914
.text:0000B9CC                                                                 ; DATA XREF: Java_com_test_native_1get_1suggestions:loc_B90Er
.text:0000B9CC                                                                 ; "Can't find method clear"
.text:0000B9D0 1E C8 04 00             off_B9D0        DCD s->CanTFindMethodAdd - 0xB91E
.text:0000B9D0                                                                 ; DATA XREF: Java_com_test_native_1get_1suggestions:loc_B918r
.text:0000B9D0                                                                 ; "Can't find method add"
.text:0000B9D4 14 C8 04 00             off_B9D4        DCD s->CanTFindMethodAdd - 0xB928
.text:0000B9D4                                                                 ; DATA XREF: Java_com_test_native_1get_1suggestions:loc_B922r
.text:0000B9D4                                                                 ; "Can't find method add"
.text:0000B9D8 66 C8 04 00             off_B9D8        DCD s->CanTFindMethodIntvalue - 0xB932
.text:0000B9D8                                                                 ; DATA XREF: Java_com_test_native_1get_1suggestions:loc_B92Cr
.text:0000B9D8                                                                 ; "Can't find method intValue"

我也觉得它比较怪,以前没有遇到过所以在这里请教一下!
2014-5-15 09:43
0
雪    币: 17
活跃值: (1836)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
suggestions(JNIEnv *env, jobject objc, int paramLong, int paramString, int paramInt1, int paramList1, int paramList3, int paramInt2)
{

  (*env)->GetStringUTFChars(env, (jstring)paramInt1, 0);

.text:0000B6F8                 LDR     R2, [SP,#0x58+paramList3]
.text:0000B6FA                 LDR     R6, [SP,#0x58+paramInt1]

}

r0为env 指针,r1 为objc, 没有使用,所以可以被覆盖,r2 传到r8 ,r8 也没有使用,r3 被覆盖,也没有使用,就是说六个参数中前两个没有使用,加上一个系统的r1没有使用,共三个没有使用,为r1,r2,r3,sp 的0 位置为传递六个参数中的第三个参数即为0000B6FA 处的参数。
2014-5-15 12:15
0
雪    币: 335
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
多谢热心回答!
2014-5-15 12:48
0
游客
登录 | 注册 方可回帖
返回
//