这里是非虫笔记本,对学习知识的一种总结。有机会可以一起学习。

ARM汇编(非虫笔记)

1.ARM汇编的目的:

分析elf文件的需要。

2.原生程序生成过程。

(1)预处理,编译器处理c代码中的预处理指令。

gcc -E hello.c -o hello.i

(2)编译 gcc编译器首先要检查代码的规范性,以及是否有语法错误,在检查无误之后,gcc编译把代码翻译成ARM汇编语言的代码。

gcc -S hello.i -o hello.s

(3)汇编,gcc编译器会挑用汇编器将汇编代码汇编成二进制目标文件。

gcc -c hello.s -o hello.o

(4)链接,这个阶段会调用链接器将二进制的目标文件链接成android平台可执行的ARM远程程序。

gcc hello.o -o hello

3.ARM知识了解

(1)与JAVA的区别:

ARM汇编语言是一门"低级"语言可以和系统的底层相互沟通。

(2)ARM汇编语言编写的程序运行速度快,占用内存少

(3)缺点是编写的代码难懂,难以维护。

(4)ARM汇编语言,c语言能实现的ARM汇编语言都能实现。

(5)ARM具有31个通用寄存器,6个状态寄存器

(6)ARM处理器支持其中运行模式。

1. 用户模式:ARM处理器正常的程序执行状态。

2.快速中断模式:用于高速数据传输或通道处理。

3.外部中断模式:用于通用的中断处理。

4.管理模式:操作系统使用的保护模式。

5.数据访问终止模式:当数据或指令预取终止时进如该模式,可用于模拟存储及存储保护。

6.系统模式:运行具有特权的操作系统任务。

7.未定义指令中止模式:当未定义的指令执行时进入该模式。

4.ARM汇编语言程序结构

(1)处理器架构定义

.arch armv5te @处理器架构

.fpu softvfp  @协处理器类型

.ebi_attribute 20,1 @接口属性

.ebi_attribute 21,1

.ebi_attribute 23,1

.ebi_attribute 24,1

.ebi_attribute 25,1

.ebi_attribute 26,1

.ebi_attribute 30,1

.ebi_attribute 18,1

.arch指定了ARM处理器架构。

.armv5te表示本程序在armv5te架构处理器上运行。

.fpu指定了协处理器的类型。

softvfp表示使用浮点运算库来模拟协处理运算。

.ebi_attribute 指定了一些接口属性。

(2)段定义:

.section 定义只读数据,属性是默认

.text 定义了代码段。

因为之前读过了8086王爽的汇编,所以对段的理解很轻松。

(3)注释与标号

注释方法:/.../多行注释,@单行注释

标号::

eg:

loop:

...

end loop

标号和8086汇编很类似。

(4)汇编器指令

程序中所有以"."开头的指令都是汇编指令,他们不属于ARM指令集。

部分会汇编器指令:

.file: 制定了源文件名。

.align:代码对其方式。

.ascii:声明字符串。

.global:声明全局变量。

.type:指定符号的类型。

(5)字程序与参数传递。

声明函数的方法:

.global 函数名

.type  函数名,%function

函数名:

声明一个实现两个数相加的函数的代码

.global MyAdd

.type MyAdd,&function

MyAdd:

add r0,r0,r1

mov pc,lr

ARM汇编规定:R0-R3这4个寄存器用来传递函数调用的第1到第4个参数,超过的参数通过堆栈来传递。

(6)ARM处理器寻址方式

1.立即寻址。

mov R0,#1234 home.php?mod=space&uid=162419 z作为前缀,表示16进制时以"0x"开头

2.寄存器寻址。

mov R0,R1

3.寄存器移位寻址。

五种移位操作:

(1)LSL:逻辑左移,移位后寄存器空出的低位补0

(2)LSR:逻辑右移,移位后寄存器空出的高位补0

(3)ASR:算数右移,移动过程中符号位不变。如果操作数是整数,则移位后空出的高位补0,否则补1

(4)ROR:循环右移,移位后移出的低位填入移位空出的高位。

(5)RRX:带扩展的循环右移,操作数右移移位,移位空出的高位用C标志的值填充。

eg:

mov R0,R1,LSL #2

4.寄存器间接寻址

LDR R0,[R1]

5.基址寻址

LDR R0,[R1,#-4]

6.多寄存器寻址

LDMIN R0,{R1,R2,R3,R4}

LDM 是数据加载命令

指令的后缀IA表示每次执行完成加载操作后R0寄存器的值自增1

ARM中,字表示的是一个32位。

R1=[R0]

R2=[R0+#4]

R3=[R0+#8]

R4=[R0+#12]

Ps:这里+#4的原因是因为32位占4个字节。

7.堆栈寻址。

STMFD SP!,{R1-R7,LR} 入栈,多用于保存子程序“现场”

LDMFD Sp!,{R1-R7,LR} 出栈,多用于回复子程序的现场

8.块拷贝寻址。

块拷贝可实现连续地址数据从存储器的某一位置拷贝到另一位置。

LDMIN R0!,{R1-R3} @从寄存器指向的存储单元中读取3个字到R1-R3寄存器。

9.相对寻址 。

相对寻址一程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到的操作数的有效地址。

非虫 android应用逆向,android逆向-ARM汇编基础-非虫笔记相关推荐

  1. 【汇编实战开发笔记】ARM汇编基础的三大块知识

    文章目录 1 前言 2 ARM知识图谱 3 ARM汇编基础三大块 3.1 寻址方式 3.1.1 立即寻址 3.1.2 寄存器寻址 3.1.3 寄存器偏移寻址 3.1.4 寄存器间接寻址 3.1.5 基 ...

  2. ida pro 反汇编 Android so 库后修改 arm 汇编指令的方法总结

    1 前言 最近博主在学习Android逆向的时候,参照吾爱破解论坛的<教我兄弟学Android逆向系列课程>学习的时候,学到第8章<教我兄弟学Android逆向08 IDA爆破签名验 ...

  3. ARM汇编基础详解(PS学习汇编的原因)

    目录 前言 1.GNU 汇编语法 2.Cortex-A7 常用汇编指令 2.1 处理器内部数据传输指令(内部寄存器数据非内存数据) 2.2 存储器访问指令(RAM) 2.3 压栈和出栈指令(了解) 2 ...

  4. ARM 汇编基础教程番外篇 ——配置实验环境

    From:https://zhuanlan.zhihu.com/p/29145513 win10 arm 汇编环境 Windows 平台下搭建 ARM 汇编集成环境:https://jingyan.b ...

  5. Alientek I.MX6UL Linux- 第七章 ARM汇编基础

      学习汇编的目的:初始化C语言运行环境. GNU汇编语法 label:instruction@comment label:标号,表示地址位置,有些指令前面可能会有标号 instruction:指令, ...

  6. arm汇编解析—qnnpack卷积实现

    目录 前言 基础直通车 arm基础知识 arm指令释义 qnn汇编代码解析 前言 最近在移植QNNPACK神经网络加速库,涉及到对卷积arm汇编的修改,这边做个记录,对汇编部分的内容进行注释,顺便学习 ...

  7. ARM汇编学习-工具篇

    qume qemu简介 - 仿真一块ARM开发板 - QEMU教程 | 宅学部落https://www.zhaixue.cc/qemu/qemu-intro.html从零使用qemu模拟器搭建arm运 ...

  8. 【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )

    文章目录 一.分析 malloc 函数的 arm 汇编语言 一.分析 malloc 函数的 arm 汇编语言 在上一篇博客 [Android 逆向]arm 汇编 ( 使用 IDA 解析 arm 架构的 ...

  9. 逆向Android软件的步骤

    2019独角兽企业重金招聘Python工程师标准>>> 逆向Android软件的步骤: 首先使用反编译的工具对反编译,然后阅读反汇编代码,如果有必要还会对其进行动态调试,找到突破口后 ...

最新文章

  1. 测试一下,你能小学毕业吗?
  2. ASP.NET-FineUI开发实践-14
  3. 图解Windows下使用SSH Secure Shell Client远程连接Linux
  4. 服务器-番外篇-搭建samba共享
  5. 扫描文件夹_按下苹果手机这个键,立马变身成为扫描仪,你不会还不知道吧?...
  6. Java BigDecimal初探
  7. SAP 电商云 Spartacus SSR Optimization Engine 几处 timeout 的执行顺序
  8. 错误内存【读书笔记】C程序中常见的内存操作有关的典型编程错误
  9. OC中的基本容器和基本数据类型
  10. java se 9.0.4_jre 9下载(Java SE Runtime Environment)下载
  11. word---自定义编号样式
  12. 嵌入在网页上Flash媒体播放器(1)
  13. Java NIO框架Netty教程(四) – ServerBootStrap启动流程源码分析
  14. ds查找—二叉树平衡因子_《大话数据结构》C++实现二叉平衡树的建立
  15. JS高级程序设计第四版启航
  16. 【电脑删不掉文件或文件夹】总结7种方法永久删除!
  17. 用java制作扑克牌_java实现简单扑克牌游戏
  18. JAVA SE 13快速安装
  19. xshell6设置选中复制 右键粘贴复制内容
  20. torch+cuda gpu并行计算

热门文章

  1. 【面朝大厂】面试官:说几种常用的分布式 ID 解决方案
  2. Unit 2: Linux/Unix Acquisition 2.1 Linux/Unix Acquistion Memory Acquisition
  3. 一程序员被网恋女友诈骗1.8万,警方调查“女友”后发现竟是...
  4. sqlserver 2000安装图解教程
  5. B2B-Destoon--注册会员公司名称修改方法
  6. 密歇根安娜堡计算机排名,密歇根大学安娜堡分校计算机科学与工程研究生最新专业排名...
  7. 将D盘多余空间分配给C盘
  8. Apollo在有赞的实践
  9. Query意图识别分析
  10. bzoj2676 Contra