首页
社区
课程
招聘
[旧帖] [求助]反汇编android so 汇编代码中的几个疑问 0.00雪花
发表于: 2016-2-20 11:21 2571

[旧帖] [求助]反汇编android so 汇编代码中的几个疑问 0.00雪花

2016-2-20 11:21
2571
在静态反汇编一个SO的过程中,开头得到这样一段汇编代码:
.text:00002770                 EXPORT Java_com_happyhour_android_xt_getKey
.text:00002770
.text:00002770 var_2D8         = -0x2D8
.text:00002770 var_2D4         = -0x2D4
.text:00002770 var_2D0         = -0x2D0
.text:00002770 var_2CC         = -0x2CC
.text:00002770 var_2C8         = -0x2C8
.text:00002770 var_2C4         = -0x2C4
.text:00002770 var_2C0         = -0x2C0
.text:00002770 var_2BC         = -0x2BC
.text:00002770 var_2B8         = -0x2B8
.text:00002770 var_2B4         = -0x2B4
.text:00002770 var_2B0         = -0x2B0
.text:00002770 var_2AC         = -0x2AC
.text:00002770 var_2A4         = -0x2A4
.text:00002770 var_294         = -0x294
.text:00002770 var_274         = -0x274
.text:00002770 dest            = -0x21C
.text:00002770 var_218         = -0x218
.text:00002770 s               = -0x214
.text:00002770 var_1C          = -0x1C
.text:00002770
.text:00002770                 PUSH    {R4-R7,LR}
.text:00002772                 MOVS    R6, R3
.text:00002774                 LDR     R3, =(__stack_chk_guard_ptr - 0x277E)
.text:00002776                 LDR     R4, =0xFFFFFD3C
.text:00002778                 MOVS    R5, R0
.text:0000277A                 ADD     R3, PC ; __stack_chk_guard_ptr
.text:0000277C                 LDR     R3, [R3] ; __stack_chk_guard

有几个疑惑的地方是:
1、__stack_chk_guard_ptr 这是什么东西?跟进去之后,发现这个地址放的是这样写的
00006f74                                 dd         0x00000000;
如果 这个真的是 0的话,那下面的语句就解释不清楚了,把地址为0的内容放入堆栈中。
.text:0000277E                 ADD     SP, R4
.text:00002780                 LDR     R1, [R3]
.text:00002782                 STR     R3, [SP,#0x2D8+var_2AC]
.text:00002784                 STR     R1, [SP,#0x2D8+var_1C]
.text:00002786                 CMP     R6, #0
.text:00002788                 BNE     loc_278C
.text:0000278A                 B       loc_2A64

对了。java jni 传递两个参数给一个是context 一个是hashmap

求各位帮忙看看,

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
对了,我怀疑这个地址是不是动态加载的时候填上去的,但是填的是什么呢?
2016-2-20 11:23
0
雪    币: 110
活跃值: (204)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
动态调试一下就可以看到,[PC+__stack_chk_guard_ptr - 0x277E]是为了取一个全局变量的值到R3
2016-2-20 17:50
0
雪    币: 52
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
__stack_chk_guard是一个堆栈溢出保护
http://www.cnblogs.com/jack204/archive/2011/09/03/2164645.html
这是一篇相关的介绍
2016-2-20 21:16
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢你啊,那你的意思就是说这是一个保护区,程序开始的时候只是把他的值保存起来。然后到程序结束的时候把开始保存的值和当前的值进行比较,如果不一样就说明堆栈溢出了是吧。
2016-2-20 23:37
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
[QUOTE=夜Wang;1416130]动态调试一下就可以看到,[PC+__stack_chk_guard_ptr - 0x277E]是为了取一个全局变量的值到R3[/QUOTE]

是取全局变量到R3. 动态调试的话,怎么调试啊。哈哈, 菜鸟一个 还请指点啊。
2016-2-20 23:39
0
游客
登录 | 注册 方可回帖
返回
//