.balignl 16,0xdeadbeef浅析
http://zqwt.012.blog.163.com/blog/static/12044684201031102956976/
最近在分析u-boot的源代码,看到这一行:
.balignl 16, 0xdeadbeef
不知道为什么要这样写,0xdeadbeef,明显是个单词组,写在这里有何意义呢?查阅了众多资料的时候才晃然大悟。
下面我一步步来说明:
首先要弄明白.balignl的意思,这其实应该算是一个伪操作符,伪操作符的意思就是机器码里,
并没有一个汇编指令与其对应,是由编译器来实现其功能的。
.balign是意思是:以当前地址为开始开始,找到第一次出现的以第一个参数为整数倍的地址,并将其作为结束地址,
在这个结束地址前面存储一个字节长度的数据,存储内容正是第二个参数。如果当前地址正好是第一个参数的倍数,则没有数据被写入到内存。
.balign 8, 0xde这条指令的含义可以用下图表示:
图解:以当前地址为开始开始,找到第一次出现的以8为整数倍的地址,并将其作为结束地址,在这个结束地址前面存储一个字节长度的数据0xde。
如果当前地址正好是8的倍数,则没有数据被写入到内存。
以此类推,.balignw则表示第二个参数存入的内容长度为2字节:
.balignw 4, 0x368d
因为现在填入的内容为2个字节,那就存在以下几种情况:
1>当前地址没有偏移就满足了以4为倍数的地址
2>当前地址偏移了1个字节就满足了以4为倍数的地址
3>当前地址偏移了2个字节就满足了以4为倍数的地址
4>当前地址编移了3个字节就满足了以4为倍数的地址
分析一下这四种情况:
1>当没有偏移的时候,地址中间肯定没有办法填上信息
2>当偏移1个字节的时候,地址中间空隙不够,所以填入的数值,是末定义,也就是说,填入什么值,不清楚
3>当偏移2个字节的时候,地址中间的空隙正好填入0x368d两个字节的内容
4>当偏移3个字节的时候,地址中间的空隙大于所要填的内容。此时填入的数值,是末定义,填入什么值,不清楚
以此类推,.balignl,这个指令用来填与一个字,即4个字节的长度
仔细分析一下就知道,对于.balignl 16, 0xdeadbeef,如果想要0xdeadbeef一定填到当前地址后面某个部分,
当前地址偏移量就必须为4字节,这样才能保证在任何情况下,偏移的地址所留的空隙刚好填入所要填的内容。
注意:0xdeadbeef是什么意思?
类似这样的值很多,像0xabababab,它们的作用就是为内存做标记,插在那里,就表示从这个位置往后的一段有特殊作用的内存,而这个位置往前,禁止访问。
.balignl 16,0xdeadbeef浅析相关推荐
- start.s中的.balignl 16,0xdeadbeef
转载:http://blog.csdn.net/l_thread/article/details/6020036 开始看start.s中的代码,又一句.balignl 16,0xdeadbeef,不知 ...
- UBOOT问题收集(1)--balignl 16, 0xdeadbeef
.balignl 16,0xdeadbeef 是uboot起始文件下的start.S文件57行. 因为好奇这个代码的含义,所以百度了下: =============================== ...
- 关于u-boot中的.balignl 16,0xdeadbeef的理解
最近在分析u-boot的源代码,看到这一行: .balignl 16,0xdeadbeef 不理解了,不知道为什么要这样写,0xdeadbeef,明显是个单词组,写在这里有何意义呢?然后在查阅了众多资 ...
- deadbeef_于关u-boot中的.balignl 16,0xdeadbeef的理解(原创,请勿转载)
最近在分析u-boot的源代码,看到这一行: .balignl 16,0xdeadbeef 不理解了,不知道为什么要这样写,0xdeadbeef,明显是个单词组,写在这里有何意义呢?然后在查阅了众多资 ...
- arm汇编:.balignl伪指令理解
首先要弄明白.balignl的意思,这个其实应该算是一个伪操作符,伪操作符的意思就是机器码里,并没有一个汇编指令与其对应,是编译器来实现其功能的..balignl是.balign的变体. .balig ...
- 第1阶段——关于u-boot目标文件start.o中.globl 和.balignl理解(3)
汇编程序中以.开头的名称并不是指令的助记符,不会被翻译成机器指令,而是给汇编器一些特殊指示,称为伪操作. .globl _start 作用:声明一个_start全局符号(Symbol), 这个_sta ...
- Uboot1.1.16源代码完全注释笔记
第一章 Uboot1.1.16中的汇编部分 老版本的Uboot1.1.16是从start.S (uboot1.1.16_256m-for36---v1.01\cpu\s3c64xx)开始执行的. 1. ...
- 关于 Uboot 中有趣的 0xdeadbeef 填充
在 Uboot 的 Start.S 中存在以下源码: .globl _start_start: b start_codeldr pc, _undefined_instructionldr pc, _s ...
- uboot代码详细分析.pdf
目录 u-boot-1.1.6 之cpu/arm920t/start.s 分析 ............................................................ ...
最新文章
- raid5 增加一块硬盘_Raid5热备盘上线同时另一块硬盘离线如何恢复数据
- Java中的断言(assert)
- 以太坊Ethereum存储和数据结构 图示
- 【收藏】使用Docker搭建MySQL服务
- 【转摘留用】页面静态化..
- 微软出手,蚕食JetBrains系市场?
- 开源FastGithub
- loss function
- python安装第三方库-常见错误解决
- 大型专利公司岗位设置
- linux中安装samba的方法以及注意事项
- 上一家单位离职的原因_员工离职再入职,专项附加扣除该如何变更?
- plt.title() 把标题置于图像下方
- linux学习作业-第八周
- sweetalert
- 走楼梯2<每日一题>
- 做一个思考者系列之--编程这件事(手稿版)
- 关于特殊后缀名如vue vm less等文件在DW中高亮显示并且代码提示的解决方案
- git添加diff tool和merge tool
- Pinterest简介
热门文章
- 计算机启动和linux启动
- 系统I/O小程序-文件拷贝
- 1356. 根据数字二进制下 1 的数目排序 golang
- Mac SecureCRT解决中文乱码
- linux 安装qt 4.6软件,QT学习之一:Linux下安装QT之版本qt-4.6.3
- c++实现任意类型数组类的封装
- C++小型公司管理系统
- linux网络编程:使用多进程实现socket同时收发数据
- Java面试题,java工程师求职简历
- 字符串驻留机制截图?#注意回顾字符串的深浅拷贝小数据池那节