.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,它们的作用就是为内存做标记,插在那里,就表示从这个位置往后的一段有特殊作用的内存,而这个位置往前,禁止访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用maven导入任意jar包

http://mvnrepository.com/ 我这里,因为是spark1.5.2版本。 保存,maven会自动下载jar包到本地仓库。 转载于:https://www.cnblogs.com/lchzls/p/6281764.html

Linux下静态IP地址的设置及TFTP服务的搭建

TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。TFTP承载在UDP上,提供不可靠的数据流传输服务,…

ASCII码表

From: http://www.96yx.com/tool/ASC2.htm ASCII码表 信息在计算机上是用二进制表示的,这种表示法让人理解就很困难。因此计算机上都配有输入和输出设备,这些设备的主要目的就是,以一种人类可阅读的形式将信息在这些设备上显示出来供人阅读理…

inotify

Linux 2.6内核中的文件系统变化通知机制 一、 引言 众所周知,Linux 桌面系统与 MAC 或 Windows 相比有许多不如人意的地方,为了改善这种状况,开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备…

bzoj 3924 幻想乡战略游戏

题目大意: 有边权点权的树,动态修改点权 每次修改后求带权重心x (\(minimize\) \(S\sum_i val[i]*dist[x][i]\)) 分析: 从暴力找突破口: 对于边x,y,设长度为len,切断后x半边树权值和为\(w_1\),y…

Linux 系统应用编程——网络编程(服务器模型)

在网络通信过程中,服务端通常需要处理多个客户端。由于多个客户端的请求可能会同时到来,服务器端可采用不同的方法来处理。总体上来说,服务器端可采用两种模型来实现:循环服务器模型和并发服务器模型。 循环服务器模型是指服务器端…

makefile中的patsubst, wildcard, notdir

From:http://blog.sina.com.cn/s/blog_60cbc1700100nuhz.html 1、wildcard : 扩展通配符 2、notdir : 去除路径 3、patsubst :替换通配符 例子: 建立一个测试目录,在测试目录下建立一个名为sub的子目录 $ mkdir test $ cd test $…

搭建实用深度学习环境(Ubuntu16.10+Theano0.8.2+Tensorflow0.11.0rc1+Keras1.1.0)

在动手安装之前,首先要确定硬件,系统,准备安装软件的版本,确定这些软硬件之间是否相互支持或兼容。本文安装的主要环境和软件如下: Ubuntu16.10CUDA8.0(cudnn5.1,CNMEM)Theano0.8.2Tensorflow0.11.0rc1Keras1.1.0 显卡…

Statspack安装心得

一,在win7下应该以管理员身份运行,sqlplusw 二,安装前要要执行如下代码,创建表空间 SQL> create tablespace perfstat 2datafile d:\oracle\oradata\eygle\perfstat.dbf 3size 500M 4extent management local; eygle为你的数据…

Linux 系统应用编程——网络编程(基础篇)

一、网络体系结构 1、OSI模型和TCP/IP 模型 网络体系结构指的是网络的分层结构以及每层使用的协议的集合。其中最著名的就是OSI协议参考模型,他是基于国际标准化组织(OSI)的建议发展起来的。它分为7个层次:应用层、表示层、会话层…

函数的定义与调用

1.理解函数 函数是一段代码块,它只定义一次,但可以被执行或调用任意次。函数可以有参数,实参(argument)和形参(parameter),实参是在运行时的函数调用时传入的参数,形参是…

C++中函数的默认参数

使用方法: (1)在函数声明或定义时,直接对参数赋值,该参数就是默认参数。(2)在函数调用时,省略部分或全部参数,这时就会使用默认参数进行代替。注意事项: &…

Linux 系统应用编程——网络编程(socket编程)

二、网络编程基础 1、套接字概述 套接字就是网络编程的ID。网络通信,归根到底还是进程间的通信(不同计算机上的进程间的通信)。在网络中,每一个节点(计算机或路由器)都有一个网络地址,也就是IP地…

Linux 代码格式化工具 indent

以下是我最喜欢的代码格式化脚本&#xff1a; #!/bin/shif [ $# -lt 1 ]; thenecho "Usage: $0 <file>"exit 1fi# format a source file(*.c, *.h)formatSrcfile(){indent -npro -nip -lp -npsl -npcs -i4 -ts4 -sob -l140 -ss -nsaf -nsai -nsaw -bl -bli 0 $…

Android处理ListView中的Item中的Button按钮不能点击的问题

问题描述&#xff1a;ListView列表中的Button按钮按钮不能点击 解决办法&#xff1a;在ListView中的Item项的布局文件中加上&#xff1a;android:descendantFocusability"blocksDescendants"&#xff0c;问题解决。

php curl拉取远程图片

<?php $url "图片绝对地址/thumbnail.jpg"; $filename curl.jpg; getImg($url, $filename); /**通过curl方式获取制定的图片到本地* 完整的图片地址* 要存储的文件名*/ function getImg($url "", $filename "") {if(is_dir(basename($fi…

Linux 下 NFS服务的搭建

NFS是Network File System的简写&#xff0c;即网络文件系统。 网络文件系统是许多操作系统都支持的文件系统中的一种&#xff0c;也被成为NFS。NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS&#xff0c;用户可以像访问本地文件一样访问远端系统上的文件。 NFS所…

GCC 参数详解

From: http://www.cppblog.com/SEMAN/archive/2005/11/30/1440.html 先附上三篇相关文章&#xff1a; LINUX下的C编译器GCC简介 linux上的C/C编译器gcc/egcs详解 gcc和g的区别(很详细的描述) [介绍] gcc and g分别是gnu的c & c编译器 gcc/g在执行编译工作的时候&#…

电子客票状态整理

1.OPEN FOR USE&#xff1a;客票有效 2.VOID&#xff1a;已作废 3.REFUND&#xff1a;已退票 4.CHECK IN&#xff1a;正在办理登机 5.USED/FLOWN&#xff1a;客票已使用 6.SUSPENDED&#xff1a;系统处理&#xff0c;或人为挂起禁止使用该票 7.PRINT/EXCH&#xff1a;电子客票已…

Linux 系统应用编程——线程基础

传送门&#xff1a;Linux多线程编程实例解析 . linux多线程编程——同步与互斥 . 传统多任务操作系统中一个可以独立调度的任务&#xff08;或称之为顺序执行流&#xff09;是一个进程。每个程序加载到内存后只可以唯一地对应创建一个顺序执行流&#xff0c;即传统意义的进程。…