头文件定义和ARM指令

2015.2.2
星期一,阴天

内存管理:内存的分配和释放等
静态和动态内存:主要是在释放方式上的区别

静态变量:编译时就已经确定,定义在函数外面
自动变量:在程序运行时才能在栈中确定
只读数据节:存放常量的地方,包括字符常量,不修改的数据

查看数据存放在那个节点:(用命令)
readelf -S (查看节点号和节点名)
readelf -x .data a.out

生命周期:(分成静态,动态)

两个宏的定义和包含:

定义一个a.h
#ifndef _A_H_
#define _A_H_
..............................
..............................

#endif

定义一个b.h,其中包含a.h
#ifndef _B_H_
#define _B_H_

#include "a.h"

..............................
..............................

#endif

ARM指令集中指令:

STR R0,[R1] //[R1] <= R0

MVN R0, #0XFF //R0 = 0XFFFFFF00 //取后面数的反码
MVN R0,#0XA0000007 //0XA0000007的反码为0x5FFFFFF8 -> R0

MOV R0,#1
MOV R1,#2
CMP R0,R1 ;若R0>R1,则置R0=3,若R0<=R1,则置R1=3
MOVHI R0,#3 ;根据CPSR条件标志位中的HI(无符号大于)判断,若R0>R1,则R0=3
MOVLS R1,#3 ;根据CPSR条件标志位中的LS(无符号小于或等于)判断,R0<=R1,则R1=3

ORR R0,R0,#3 ;逻辑或运算,R0 = R0 | 3

BIC R0,R0,#0x0B ;将R0的bit0,bit1,bit3清零,其余位不变

跳转指令:
B 无条件跳转
BL 适合子程序的调转,地址有保存,可以返回
B label PC <- label
BL label LR <- PC-4,PC <- label

MRS R0,CPSR ;传送CPSR的内容到R0
MRS R1,SPSR ;传送SPSR的内容到R1

LDR R1,=0x30003100
LDRB R0,[R1] ;将存储器地址为R1的字节数据读入寄存器R0,并将R0的高24位清零
LDRH R2,[R1] ;将存储器地址为R1的半字数据读入寄存器R2,并将R2的高16位清零

STR R0,[R1] ;将R0中的字数据写入以R1为地址的存储器中
STR R0,[R1,#8] ;将R0中的字数据写入以R1+8为地址的存储器中

LDR R1,=0x30003100
LDMIA R1,{R5,R6} ;R5 = [R1],R6 = [R1+4]
MOV R2,#0x33
MOV R3,#0X44
STMIA R1,{R2,R3} ;[R1]=R2,[R1+4]=R2

数据传送指令:
MOV
MOVS (会影响标志位)
MVN 取反

ADD
SUB
RSB Rd,Rn,R1 Rd <- R1-Rn 逆向减法

影响标志位:
ADC
SBC
RSC

逻辑处理指令:
AND
ORR
EOR 异或
BIC 位清除指令

比较指令:
CMP 减法运算,结果不保存,修改标志位
TST 位测试指令TST Rn operand 将Rn的值与operand的值按位作逻辑“与”操作,根据操作的结果更新CPSR中的相应条件标志位,当所有测试位为0时-> Z = 1
TEQ 相等测试指令,将Rn的值与operand的值按位作逻辑“异或”操作,根据操作的结果更新CPSR中的相应条件标志位,当两个数据相等时:EQ有效,否则:NE有效

程序状态寄存器访问指令:
MRS 状态寄存器 -> 寄存器
MSR 状态寄存器 <- 寄存器

MRS R1,CPSR 将CPSR状态寄存器读取,保存到R1
MRS CPSR,R1 R1 -> CPSR

加载/存储指令--单寄存器加载

LDR
LDRB
LDRT
....

STR
STRB
STRT
....

向后索引:LDR Rd,[Rn],#-0x04 1.Rd <- [Rn] Rn = Rn-4

***********************************************************************************************************************************
***********************************************************************************************************************************
***********************************************************************************************************************************
***********************************************************************************************************************************

时间: 2024-08-27 14:20:36

头文件定义和ARM指令的相关文章

头文件定义

头文件定义 1 #include <string> 2 #include <vector> 3 #include <algorithm> 4 #include <numeric> 5 #include <set> 6 #include <map> 7 #include <queue> 8 #include <iostream> 9 #include <sstream> 10 #include <

&lt;climits&gt;头文件定义的符号常量

<climits>头文件定义的符号常量 CHAR_MIN  char的最小值 SCHAR_MAX  signed char 最大值 SCHAR_MIN   signed char 最小值 UCHAR_MAX  unsigned char 最大值 SHRT_MAX  short 最大值 SHRT_MIN short 最小值 USHRT_MAX unsigned short 最大值 INT_MAX int 最大值 INT_MIN  int 最小值 UINT_MAX  unsigned int 最大

ARM指令集中常用的存储和加载指令

ARM微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作.常用的加载存储指令如下: -  LDR     字数据加载指令 -       LDRB    字节数据加载指令 -  LDRH    半字数据加载指令 -  STR     字数据存储指令 -       STRB    字节数据存储指令 -  STRH    半字数据存储指令 1.LDR指令 LDR指令的格式为: LDR{条件} 目的寄存器,<存储器地址>

Android ARM指令学习

在逆向分析Android APK的时候,往往需要分析它的.so文件.这个.so文件就是Linux的动态链接库,只不过是在ARM-cpu下编译的.所以学习Android下的ARM指令很重要.目前,市面上的ARM-cpu基本都支持一种叫做THUMB的指令集模式.这个THUMB指令集可以看作是ARM指令集的子集,只不过ARM指令集为32bit,THUMB指令集为16bit.之所以要使用这个THUMB指令集,主要是为了提升代码密度.具体信息大家可以google. 下面介绍如何简单修改.so文件. 首先,

C/C++:多个.cpp文件包含同一个.h头文件定义方法

本文解决multiple definition of `XX'的错误.[出于反爬虫的目的,你不是在http://blog.csdn.net/zhanh1218上看到的,肯定不是最新最全的.] 关于头文件的定义中,请一定加上以下代码(此为头文件保护符): <span style="font-size:14px;"><span style="font-size:12px;">#ifndef PERSON_H_ #define PERSON_H_

cctype 头文件定义函数

header <cctype> (ctype.h) Character handling functions This header declares a set of functions to classify and transform individual characters. Functions These functions take the int equivalent of one character as parameter and return an int that ca

ARM指令分类及其寻址方式

ARM指令分类及其寻址方式 一:ARM指令的分类 ARM指令集可以分为以下6类: •跳转指令: •数据处理指令: •程序状态寄存器(PSR)传输指令: •load/store指令: •协处理器指令: •异常中断产生指令: 二.ARM指令的一般编码格式 ARM指令字长为固定的32位.一条典型的ARM指令语法格式及编码格式如下: 语法格式: <opcode>{<cond>}{s}   <Rd>,<Rn>,<shifter_operand> •<

ARM指令解析

今天我来总结一下arm指令的学习,今天我不会对所有的arm指令进行一一的解析,在这里希望大家去看arm汇编手册,这个手册的中文版我放在了http://download.csdn.net/detail/wrjvszq/8324589大家先拿到这个文档,这个文档对arm指令的解析相当的全面,但是这里要注意的是文档是arm对标准的汇编写出的文档,但是我们要用的是gnu的汇编,这两个稍微有点区别,关于区别大家可以去看看这个博客http://www.cnblogs.com/hnrainll/archive

ARM指令教程

ARM指令教程 ARM汇编程序特点: l         所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理,都是要传送到通用寄存器来完成.因此代码中大量看到LDR,STR指令来传送值. l         ARM汇编语句中.当前语句很多时候要隐含的使用上一句的执行结果.而且上一句的执行结果,是放在CPSR寄存器里,(比如说进位,为0,为负…) CMP R0,R1 BNE NoMatch 比如上一句,BN