通过Android JNI编程来学习三大结构的ARM汇编
来源:互联网 发布:数控加工编程代码 编辑:程序博客网 时间:2024/06/07 03:49
有一段时间不更新了,不得不佩服人的惰性的强大,最怕水平底还比较懒得人,譬如我,哎,废话不说了,开始学习
目标:这篇文章主要是学习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,回车进去可以看到:
- 通过Android JNI编程来学习三大结构的ARM汇编
- ARM汇编编程学习
- ARM汇编编程基础(三) -- ARM汇编伪操作
- ARM汇编编程基础(三) -- ARM汇编伪操作
- ARM汇编编程基础(三) -- ARM汇编伪操作
- ARM的汇编学习
- android jni 编程 三
- Java应用中通过JNI嵌入c或者汇编代码来抓取qtrace的步骤
- android JNI学习三
- ARM裸机编程需要知道的汇编知识2---哈弗结构和冯诺依曼结构
- Android JNI编程学习
- ARM汇编学习的总结
- Arm汇编学习笔记(三)——GCC内联汇编
- android ViewPager学习(三)通过FragmentPagerAdapter来创建ViewPager
- ARM汇编结构
- 通过shell例子来学习循环结构的语法
- Android通过JNI操作串口《三》
- ARM汇编编程的建议规则 AAPCS
- XU_SecurityLoadRoles 运行机制以及如何优化性能
- android matrix 最全方法详解与进阶(完整篇)
- 查询Oracle正在执行和执行过的SQL语句 ,
- android studio 快捷键及使用方法,快速掌握
- 自定义控件玩套路以及canvas StaticLayout的使用
- 通过Android JNI编程来学习三大结构的ARM汇编
- 关于冒泡算法的使用
- BZOJ4050 [Cerc2014] Wheels
- JAVA中整型与字符型相互转换
- socket基本函数
- 【集群】corosync+pacemaker+iscsi+pcs
- Hdu-3746 Cyclic Nacklace
- 2016sdau课程练习专题三 1013
- 思昨日