【安卓逆向】ARM常见汇编指令总结
跳转指令
B 无条件跳转
BL 带链接的无条件跳转
BX 带状态切换的无条件跳转
BLX 带链接和状态的无条件跳转
存储器与寄存器交互数据指令(核心)
存储器:主存和内存
寄存器中放的数据:可以是字符串,可以是数,也可以是一个地址,他可以放各种类型的数据
存储地址单元:地址(如如0x00004000)与地址中存在的值
LDR:从存储器中加载数据到存储器←Load
LDR R8,[R9,#] R8为待加载数据的寄存器,加载值为R9+0x4所指向的存储单元 STR:将寄存器的数据存储到存储器中→Store
STR R8,[R9,#] 将R8寄存器的数据存储到R9+0x4所指向的存储单元 LDM:将存储器的数据加载到寄存器列表→
LDM R0,{R1-R3}将R0指向的存储单元的数据依次加载到R1,R2,R3寄存器 STM:将一个寄存器列表的数据存储到指定的存储器中
PUSH:将寄存器值推入堆栈
POP:将堆栈值推出到寄存器
SWP:将寄存器与存储器之间的数据进行交换
SWP R1, R1 [R0] 将R1寄存器与R0指向的存储单元的内容进行交换
堆,队列:数据结构,栈是竖的,后进先出,且只能从栈顶依次填入数据
数据传输指令
MOV:将立即数或寄存器的数据传送到目标寄存器
MOV R0, # :R0=0x8
数据算数指令
ADD:+
SUB:—
MUL:*
DIV: /
数据逻辑运算指令
与:AND
或:ORR
异或:EOR
LSL:逻辑左移←
LSR:逻辑右移→
LSL R0,R1,#:R0=R1*
移位:实质是乘,除,类似于小数点移位,但相反。小数点左移,数变小;右移变大。
但逻辑移位,左移变大,右移变小,且按2的倍数进行,因为是2进制。
比较指令
CMP:比较
CMP R0 #:R0寄存器中的值与0比较
标志位:如z位,这个都可以在动态调试时,寄存器窗口看到
其他指令
协处理器指令:SWT (切换用户模式)
伪指令:DCB
寄存器寻址方式
立即寻址:MOV R0,#→R0=0X1234
寄存器寻址:MOV R0,R1→R0=R1
寄存器移位寻址:MOV R0,R1,LSL #→R0=R1*
寄存器间接寻址:LDR R0,[R1]→将R1寄存器中的值作为地址,取出地址中的值赋予R0
寄存器间接基址偏移寻址:LDR R0,[R1,#-]→将R1寄存器的值-0x4的值作为地址,取出地址中的值给R0
对int a=0;这一句简单高级语言的汇编理解
首先会开辟一个内存存储单元,然后把0x0这个数放入R0寄存器,然后再把R0寄存器的数据放入内存存储单元。所以:MOV R0,#0 STR R0,[R11,#0x14+var_20]
注意:变量要看存储单元地址,不要以为是寄存器,简单时可以这么看,但试想,如果寄存器是变量,那得要多少寄存器。寄存器就是一个桥梁,和存储器即存储单元地址交互的东西。
【安卓逆向】ARM常见汇编指令总结的更多相关文章
- 常见寄存器以及常见汇编指令,常见爆破指令 good
CPU的任务就是执行存放在存储器里的指令序列.为此,除要完成算术逻辑操作外,还需要担负CPU和存储器以及I/O之间的数据传送任务.早期的CPU芯片只包括运算器和控制器两大部分.到了近几年,为了使存储器 ...
- ARM 常用汇编指令
ARM 汇编程序的框架结构 .section .data <初始化的数据> .section.bss <未初始化的数据> .section .text .global _sta ...
- ARM 内核 汇编指令 的 8种 寻址方式
str: store register ->指令将寄存器内容存到内存空间中, ldr: load register 将内存内容加载到通用寄存器, ldr/str 组合来实现ARM CPU 和内 ...
- ARM常用汇编指令介绍
b 跳转指令(跳转范围为32Mb) bl 带返回地址的跳转,指令自动将下一条指令的地址复制到R14寄存器,然后跳转到指定地址去执行,执行完后返回到下一条指令处执行 pc 寄存器R1 ...
- 1.汇编指令介绍(arm)
本文作为本人学习过程中的记录及时不时的突发奇想偶记.鄙人菜鸟一只,文中如有错误或疏漏,若读者肯不吝赐教,在下感激零涕.文章一直不断更新中 一.汇编语言 汇编语言是一种应用计算机.微处理器.微控制器或其 ...
- 常用ARM汇编指令
常用ARM汇编指令 [日期:2012-07-14] 来源:Linux社区 作者:xuyuanfan77 [字体:大 中 小] 在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初 ...
- ARM汇编指令的一些总结-转
ARM汇编指令的一些总结ARM汇编指令很多,但是真正常用的不是很多,而且需要认真琢磨的又更少了.比较有用的是MOV B BL LDR STR还是通过具体汇编代码来学习吧.@ disable watch ...
- 逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧
上一篇:逆向---02.je & jmp & jnz .OD调试 基础知识:(栗子中也会说的)栗子:链接: https://pan.baidu.com/s/1qZbbTvQ 密码: i ...
- ARM体系结构和汇编指令
第一节 可编程器件的编程原理 1. 可编程器件的特点 1 . CPU在固定频率的时钟控制下节奏运行 2 . CPU可以通过总线读取外部存储设备中的二进制指令集,然后解码执行 3 . 这些可以被CPU解 ...
随机推荐
- 编辑当前目录及其子目录,对比指定文件大小 (bat)
@echo off :: 设置对比大小校验(单位为kb) set COMPARE=100 ::指定起始文件夹 cd %~dp0/ set DIR_PATH=%cd% :: 输出文件目录 set RES ...
- 微信小程序之数组操作:push与concat的区别
微信小程序中需要用到数组的操作,push和concat二者功能很相像,但有两点区别. 先看如下例子: var arr = []; arr.push(); arr.push(); arr.push([, ...
- 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。”
出现场景: From1中事件B绑定在事件A,事件A由工厂模式下的设备产生,当离开Form1时,设备中的事件A仍然会触发事件B,此时就会导致如上问题 原因(个人理解): 1.Form1已经被销毁了,但仍 ...
- RN开发-windows环境搭建
1.安装jdk,sdk,C++运行环境(cygwin,Windows SDK,mingw),node.js和git 2.设置全局使用指定的镜像 打开git-cmd.exe ...
- python爬虫匹配实现步骤
import requests,re url='https://movie.douban.com/top250' urlcontent=requests.get(url).text #正则 ''' 实 ...
- php设计模式之策略模式实例代码
html <html> <head> <meta charset="UTF-8"> <title>简单计算器</title&g ...
- 最近手机价格全线暴跌真的只是因为5G要来了吗?
等等党,是一群数量颇大的消费群体.他们的消费习性是绝不买刚上市的新品,而是一直等.等到他们认为产品的价格已经跌无可跌,或者性价比十足的时候再出手.不得不说,与早买早享受的尝鲜消费群体相比,等等党代表了 ...
- C++-数据抽象入门
一.假定数据是如何存储的 隐藏某些实现逻辑时,我们是想要隐藏绘制子弹的细节.我们是通过使用一个可以调用的函数,而不是直接写出绘制子弹到屏幕上的代码来实现的.这里同样可以使用一个函数来隐藏棋盘存储的细节 ...
- Linux 配置mysql 远程连接
1.首先用root用户登录mysql mysql -u root -p 2.新建用户 use mysql; select host,user from user;(查看现有用户) CREATE USE ...
- sql查询 ——聚合函数
--聚合函数 -- sum() -- 求和 select sum(age) from student; -- count() -- 求数量 -- 数据量 select count(*) as '数量' ...