
ARM汇编
drinkingcode
分享好玩科技,探索未知世界
展开
-
* CPSR 和 SPSR
CPSR:程序状态寄存器(current program status register)(当前程序状态寄存器),在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。CPSR在用户级编程时用于存储条件码。 SPSR:程序状态保存寄存器(saved program statusregister),每一种处理器模式下都有一转载 2015-10-10 10:53:35 · 714 阅读 · 0 评论 -
GNU 链接脚本浅析
GNU-ld链接脚本浅析原作者的E-mail是zhanglei@sict.ac.cn 0. Contents1. 概论2. 基本概念3. 脚本格式4. 简单例子5. 简单脚本命令6. 对符号的赋值7. SECTIONS命令8. MEMORY命令9. PHDRS命令10. VERSION命令11. 脚本内的表达式12. 暗含的连接脚本1. 概论每一个链接过程都由链接脚本(转载 2015-10-10 10:48:05 · 539 阅读 · 0 评论 -
ARM数据处理指令中的立即数问题
CPU的手册上,数据处理指令格式如上: 立即数是Operand2部分,占据了机器码的低12位。其中最低8位称为immed_8,高4位称为rotate_imm。 立即数的数值计算方法:=immed_8 循环右移 (2 * rotate_imm)。就是说,一个立即数0x56000000,循环左移,如果可以得到一个用8位位图表示的数,则该立即数0x56000000是一个合法的立即数;转载 2015-10-10 10:49:50 · 1958 阅读 · 0 评论 -
ARM指令集
ARM 指令集寄存器和处理器模式(26-bit 体系) 寄存器和处理器模式(32-bit 体系) 程序状态寄存器和操纵它的指令 寄存器装载和存储指令 算术和逻辑指令 移位操作 乘法指令 比较指令 分支指令 条件执行 软件中断指令APCS (ARM 过程调用标准) 编写安全的 32-bit 代码的基本规则 IEEE 浮点指令转载 2015-10-10 10:48:02 · 2357 阅读 · 0 评论 -
elf文件格式
elf文件格式-- 另一文本方式的elf文档 write by breadbox Email:breadbox@muppetlabs.com 译:alert7 from m4in security team http://www.patching.net isearthling 19:45 2001-5-16 译者注: 由于翻译者水平有限(包括技术水平和翻译水平:(),所以 有些地方或许比较难转载 2015-10-10 10:48:10 · 531 阅读 · 0 评论 -
字节对齐详解
一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能转载 2015-10-10 10:48:12 · 290 阅读 · 0 评论 -
ELF文件和BIN文件
文件的内容:1. BIN文件是 raw binary 文件,这种文件只包含机器码。2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。所以ELF文件的体积比对应的BIN文件要大。文件的执行:1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行; FILE *fp = fopen("vmlinux.bin", "rb");转载 2015-10-10 10:48:20 · 410 阅读 · 0 评论 -
ARM_SWP指令用法
SWP寄存器和存储器交换指令。SWP指令用于将一个内存单元(该单元地址放在寄存器Rn中)的内容读取到一个寄存器Rd 中,同时将另一个寄存器Rm 的内容写入到该内存单元中。使用SWP 可实现信号量操作。指令格式如下:SWP{cond}{B} Rd,Rm,[Rn]其中,B 为可选后缀,若有B,则交换字节,否则交换32 位字:Rd 为数据从存储器加载到的寄存器;Rm 的数据用于存储到存储器中,若Rm 与转载 2015-10-10 10:49:52 · 3102 阅读 · 0 评论 -
SWI中断详解
SWI指令---软件中断实例详解 关键字: SWI,指令,软件中断,实例,详解 SWI,即software interrupt软件中断。该指令产生一个SWI异常。意思就是处理器模式改变为超级用户模式,CPSR寄存器保存到超级用户模式下的SPSR寄存器,并且跳转到SWI向量。其ARM指令格式如下: SWI{cond} immed_24 Con转载 2015-10-10 10:49:55 · 2433 阅读 · 0 评论 -
ARM 汇编 伪指令 MACRO及MEND
ARM 汇编 伪指令 MACRO及MEND MACRO伪操作标识 宏定义的开始,MEND标识宏定义的结束。用MACRO 及MEND定义一段代码,称为宏定义体,这样在程序中就可以通过宏指令多次调用该代码段语法格式MACRO{$label} macroname {$parameter {,$par转载 2015-10-10 10:49:58 · 1600 阅读 · 0 评论 -
嵌入式C和汇编混合编程规则——ATPCS规则
ATPCS规则 为了使单独编译的C语言程序和汇编程序之间能够相互调用,必须为子程序之间的调用规定一定的规则.ATPCS就是ARM程序和THUMB程序中子程序调用的基本规则。一.ATPCS概述ATPCS规定了一些子程序之间调用的基本规则.这些基本规则包括子程序调用过程中寄存器的使用规则,数据栈的使用规则,参数的传递规则.为适应一些特定的需要,对这些基本的调用规则进行一些修改得到几种不同的转载 2015-10-10 10:50:04 · 1789 阅读 · 0 评论 -
ARM 伪指令详解[转]
4.1 ARM汇编器所支持的伪指令在ARM汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。在ARM的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇转载 2015-10-10 10:52:34 · 1264 阅读 · 0 评论 -
TQ2440之uboot---6.start.S中relocate部分分析,adr与ldr区别
<span style="font-family:宋体;mso-ascii-font-family:" times="" new="" roman";mso-hansi-font-family:"times="" roman""="">在u-boot的start.S中有这么一段 relocate: /*relocate U-Boot转载 2015-10-10 10:53:17 · 391 阅读 · 0 评论 -
详解C中volatile关键字
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;vo转载 2015-10-10 10:50:09 · 301 阅读 · 0 评论 -
对.lds连接脚本文件的分析
对于.lds文件,它定义了整个程序编译之后的连接过程,决定了一个可执行程序的各个段的存储位置。虽然现在我还没怎么用它,但感觉还是挺重要的,有必要了解一下。先看一下 GNU官方网站上:http://www.gnu.org/对.lds文件形式的完整描述:SECTIONS {...secname start BLOCK(align) (NOLOAD) : AT ( ldadr ) { conten转载 2015-10-10 10:48:07 · 310 阅读 · 0 评论