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

来源:互联网 发布:淘宝上可以卖膏药吗 编辑:程序博客网 时间:2024/05/19 12:37

我们先分析在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 0
原创粉丝点击