[Android]安全第四步,看懂汇编


我们先分析在NDK对应IDA中的一段代码。这是一个很简单返回字符串的代码





主要问题有以下几点:
1. R11为啥开始要进行 ADD     R11, SP, #4操作,不进行可以么?

解答:R11可以当做栈底理解,其特殊作用,等下详细研究(待百度)
之说以要加上4是因为将栈底位置记录,从而在栈(sp)变化的时候,不会随之发生变化,

2.var_C 、var_8什么意思?
函数变量的相对位置

3.跳转的时候R0,R1有啥区别?为啥不能用R0,传参数的详细东西
R0\R1都是相当于参数,arm上使用寄存器传递参数时一般只是用r0~r3,因此,系统直接将其压入栈中!然后和一般函数一样的方式去保护可能会被覆盖的寄存器的状态。
将r0~r3压入栈中之后,如果还有更多的参数,则之前必须(应当)已经压入栈中,那么此时的状态就和pc上的类似了。

4.返回的时候就在R0中么?
是的~


5.最后一行为啥要 ,这样岂不是无用功么?

不是无用功,首先第一行是将上个函数即为NewStringUTF(getChar());返回回来,
然后第二行再通过R0将这个函数的返回值放入进去。其中R0为返回的值

同时, pc 总是包含下一个要被执行的指令的位置。




问题6
 
BX LR的意思



7.在汇编中,其实就存在全局和局部两种变量,其中全局变量会存在于.data区域,静态变量也是全局变量的一种


8. 其实就是 0x9999999A, 0x3FF19999 ,不同的是因为要放到double中,参数是double类型的,所以需要放到64位中,



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值