有一段时间不更新了,不得不佩服人的惰性的强大,最怕水平底还比较懒得人,譬如我,哎,废话不说了,开始学习
目标:这篇文章主要是学习ARM汇编,通过JNI开发技术,编译出对应的SO文件,然后通过IDA分析,既能够稳固JNI开发,也能够学习ARM汇编:
一.首先第一个for循环结构:
1.首先按照之前一篇JNI开发技术,写一个简答的应用,把关键点代码段写在JNI里面,这里就是把for循环这个写在这个里面,具体的步骤就不讲了,源代码见下载一点击打开链接.
核心代码是:
应用的运行结果是:
很简单就是把第一个参数进行一个for循环相加,再加上第二个参数。
2.接下来把对应的libaddcomputer.so拉进去IDA里面:
在Exports选项框里面找到这个函数如图:
点进去为:
接下来才进入主题:
分析这段代码:
一句一句解释:
首先如果这个结果不明显,可以空格键后显示为如下:
我们可以根据这个进行分析:
首先CMP R2,#0
就是将寄存器R2的值与立即数0进行比较,根据结果设置CPSR的标志位。这里面重点关注loc_c74这一块:
可以知道:
loc_c74
ADD R0,R0,R1
ADD R1,R1,#1
CMP R1,R2
BNE loc_c74
这块对应的就是如下:
别的很好理解,循环这块就理解到这。
二.if-else选择结构:
我简单写了一个小的应用程序,源代码见下载二.
把if-else写在核心SO文件里面:如下:
运行的结果是:
同样的把SO文件拉进去IDA里面我们同样的找到核心的函数:
STMFD与LDMFD指令的理解:
简单来看就是现场的保护,数据复制,等等就是表示一个函数要开始执行了.就是压栈出栈的一个过程。
首先开始时,R2,R3寄存器的值给了寄存器R4,R0;然后调用函数
_extendsfdf2,回车进去可以看到: