当前位置: 首页 > 编程日记 > 正文

ARM 位置无关代码(PIC)的分析理解

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

PIC的特点是:

        它被加载到任意地址空间都可以正确的执行。其原理是PIC对常量和函数入口地址的操作都是基于PC+偏移量的寻址方式。即使程序被移动,但是PC也变化了,而偏移量是不变的,所以程序仍然可以找到正确的入口地址或者常量。

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

加载域:是代码存放的地址

运行域:是代码运行时的地址

链接地址:运行时,程序应该位于的地址

在一些场合,一些代码并不在储存这部分代码的地址上执行,比如说,放在norflash中的代码可能最终是放在RAM中运行,那么在norflash中的地址就是加载域,而在RAM中的地址就是运行域。

在汇编代码中我们常常会看到一些跳转指令,比如说b、bl(是位置无关的指令)等这些指令后面是一个相对地址而不是绝对地址,比如说b main,这个指令应该怎么理解呢?main这里究竟是一个什么东西呢?

       这时候就需要涉及到链接地址的概念了,链接地址实际上就是链接器对代码中的变量名、函数名等东西进行一个地址的编排,赋予这些抽象的东西一个地址,然后在程序中访问这些变量名、函数名就是在访问一些地址。一般所说的链接地址都是指链接这些代码的起始地址,代码必须放在这个地址开始的地方才可以正常运行,否则的话当代码去访问、执行某个变量名、函数名对应地址上的代码时就会找不到,接着程序无疑就是跑飞。

        但是上面说的那个b main的情形有点特殊,b、bl等跳转指令并不是一个绝对跳转指令,而是一个相对跳转指令,什么意思呢?就是说,这个main标签最后得到的只并不是main被链接器编排后的绝对地址,而是main的绝对地址减去当前的这个指令的绝对地址所得到的值,也就是说b、bl访问到的是一个相对地址,不是绝对地址,因此,包括这个语句和main在内的代码段无论是否放在它的运行域它都能正常运行。这就是所谓的位置无关代码。

由上面的论述可以得知,如果你的这段代码需要实现位置无关,那么你就不能使用绝对寻址指令,否则的话就是位置有关了。

转载于:https://my.oschina.net/jxhui23/blog/637028

相关文章:

Linux压缩/解压缩

整合资源,仅供自己参考:) TAR 命令名 tar - tar 档案文件管理程序的 GNU 版本。下面将逐个介绍其含义 总览 tar [ - ] A --catenate --concatenate | c --create | d --diff --compare | r --append | t --list | u --update | x -extract -…

为什么校招面试中总被问“线程与进程的区别”?我该如何回答?

作者 | 宇宙之一粟责编 | 徐威龙出品 | AI 科技大本营(rgznai100)进程与线程?(Process vs. Thread?)面试官(正襟危坐中):给我说说“线程”与“进程”吧。我(总…

Linux线程编程

1.编译 undefined reference to pthread_create问题解决 出现如下错误: undefined reference to pthread_create undefined reference to pthread_join 问题原因: pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread…

PHP引擎php.ini 和fastcti优化

1.1 php引擎缓存优化加速1)eaccelerator2)Zend3)xcache1.2 使用tmpfs作为缓存加速的的文件目录[rootLNMP ~]# mount -t tmpfs /dev/shm -o size256m[rootLNMP ~]# mount -t tmpfs /dev/shm/ /tmp/eaccelerator/提示:1、上传图片缩…

从*p++说指针,数组,结构和函数

说明文中*p和*s都是一个东西&#xff0c;不做字面上的统一了。 因为右结合性&#xff0c;*p 其实就是 *(p) 1.strlen的实现 #include <stdio.h> main(){char str[] "Abcde";printf("\n string %s length %d \n",str,str_length(str)); }int str…

8比特数值也能训练模型?商汤提训练加速新算法丨CVPR 2020

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;在CVPR 2020上&#xff0c;商汤研究院链接与编译团队、高性能计算团队和北航刘祥龙老师团队合作提出了用于加速卷积神经网络训练过程的INT8训练技术。该工作通过将网络的输入、权重和梯度量化到8比特来加速网络的前向传…

×××作,不知写些什么

博客&#xff0c;老是有写的冲动&#xff0c;不过&#xff0c;没什么韧劲坚持&#xff0c;自己感觉文采一般般啦&#xff0c;有时兴起&#xff0c;挥毫泼墨&#xff0c;蜡笔重唱一番&#xff0c;呵呵&#xff0c;自个爽朗了&#xff0c;呵呵 所以&#xff0c;自己坚持&#xff…

centos7 install 安装mysql

CentOS 7的yum源中貌似没有正常安装mysql时的mysql-sever文件&#xff0c;需要去官网上下载 # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # rpm -ivh mysql-community-release-el7-5.noarch.rpm # yum install mysql-community-server成功安装之…

AI四巨头Google、DeepMind、Microsoft、Uber深度学习框架大比拼

编者按&#xff1a;Google、Uber、DeepMind和Microsoft这四大科技公司是当前将深度学习研究广泛应用于自身业务的典型代表&#xff0c;跻身全球深度学习研究水平最高的科技公司之列。GPipe、Horovod、TF Replicator和DeepSpeed分别是这四家公司开发应用的深度学习框架&#xff…

转《刘润的数字化家庭》

数字家庭也是我的一大梦想&#xff0c;感谢刘润让我的想法更加丰富和具体。。。 转载自刘润的博客&#xff0c;原文地址&#xff1a;http://blog.run2me.com/runliu/archive/2010/06/12/37082.aspx 1 of 22 &#xff08;大图&#xff09;&#xff1a;用数字化的技术&#xff0c…

自己写的内存池Slabs

看memcached的源码写的&#xff0c;虽然很粗糙&#xff0c;但是基本思想还是有的&#xff0c;自娱自乐&#xff0c;后期不断改进。 #include <stdio.h> #include <stdlib.h> #include <string.h>struct st{void * start;void * end;char ptr[10]; }; struct …

Eclispse Che(2):启动Che服务,进入IDE界面

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/50888878 未经博主允许不得转载。 博主地址是&#xff1a;http://blog.csdn.net/freewebsys 1&#xff0c;关于Docker 上次使用Che的时候没有成功创建Project。 其实主要问题就是docker的网络问题。 使用…

使用strace和ltrace跟踪程序调用

ltrace能够跟踪进程的库函数调用,它会显现出哪个库函数被调用,而strace则是跟踪程序的每个系统调用.1.系统调用的输出对比程序代码&#xff1a;#include <stdio.h> main(){char str[] "Abcde";printf("\n string %s length %d \n",str,str_length(…

NeHe OpenGL第三十三课:TGA文件

NeHe OpenGL第三十三课&#xff1a;TGA文件 加载压缩和未压缩的TGA文件: 在这一课里&#xff0c;你将学会如何加载压缩和为压缩的TGA文件&#xff0c;由于它使用RLE压缩&#xff0c;所以非常的简单&#xff0c;你能很快地熟悉它的。 我见过很多人在游戏开发论坛或其它地方询问…

阿里自动驾驶新突破!达摩院自研ISP图像处理器大幅提升安全性

阿里巴巴达摩院在自动驾驶领域取得新突破&#xff01;4月8日&#xff0c;据记者了解&#xff0c;达摩院已经自主研发出用于车载摄像头的ISP处理器&#xff0c;保障自动驾驶车辆在夜间拥有更好的“视力”&#xff0c;“看”得更清晰&#xff0c;从而大幅提升自动驾驶安全性, 而背…

3月14号作业

<!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title></title> </head> <body> <br/> <br/> <img src"51job表单_03.gif"</br> <br/> <br/>…

NeHe OpenGL第三十五课:播放AVI

NeHe OpenGL第三十五课&#xff1a;播放AVI 在OpenGL中播放AVI: 在OpenGL中如何播放AVI呢&#xff1f;利用Windows的API把每一帧作为纹理绑定到OpenGL中&#xff0c;虽然很慢&#xff0c;但它的效果不错。你可以试试。 首先我得说我非常喜欢这一章节.Jonathan de Blok使我产生…

为什么TCP的TIME_WAIT状态要保持2MSL?

TIMEWAIT状态也称为 2MSL等待状态。每个具体TCP实现必须选择一个报文段最大生存时间MSL(Maximum Segment Lifetime)。它是任何报文段被丢弃前在网络内的最长时间。我们知道这个时间是有限的&#xff0c;因为TCP报文段以IP数据报在网络内传输&#xff0c;而IP数据报则有限制其生…

深度 | 一文读懂“情感计算”在零售中的应用发展

作者 | 黄程韦博士、刘刚、包飞博士、杨现博士、孙皓博士、沈艺博士来源 | 苏宁零售技术研究院零售商需要不断通过创新服务来提高顾客的购物体验&#xff0c;而情感计算在该领域具有独特优势。它在零售行业的应用&#xff0c;主要集中在提升购物体验的服务中。在这个科技逐步改…

mysql基于replication实现最简单的M-S主从复制

2019独角兽企业重金招聘Python工程师标准>>> 什么是replication Replication可以实现数据从一台数据库服务器&#xff08;master&#xff09;复制到一到多台数据库服务器。 默认情况下&#xff0c;属于异步复制&#xff0c;因此无需维持长连接。 通过配置&#xff0…

Linux下高并发socket最大连接数所受的各种限制

修改最大打开文件数 # ulimit -n 修改最大进程数 # ulimit -u ------------------------------------------------------ Linux下高并发socket最大连接数所受的各种限制 转自&#xff1a;http://blog.csdn.net/guowake/article/details/6615728 1、修改用户进程可打开…

linux安全问答(1)

一、如何限制对系统资源的过度使用&#xff1f; &#xff08;1&#xff09;、编辑/etc/security/limits.conf文件&#xff0c;在其中加入或改变下面这些内容&#xff1a; * hard core 0 //禁止创建core文件 * hard rss 5000 //表示除root用户之外&#xff0c;其他用户都只能最多…

快速搭建对话机器人,就用这一招!

作者 | Milvus.io 责编 | 胡巍巍问答系统是自然语言处理领域一个很经典的问题&#xff0c;它用于回答人们以自然语言形式提出的问题&#xff0c;有着广泛的应用。其经典应用场景包括&#xff1a;智能语音交互、在线客服、知识获取、情感类聊天等。常见的分类有&#xff1a;生成…

目前流行的源程序版本管理软件和项目管理软件都有哪些?各有什么优缺点?...

目前流行的源程序版本管理软件和项目管理软件&#xff1a;Microsoft TFS&#xff0c;Github&#xff0c;SVN&#xff0c;Coding 各自的优缺点&#xff1a; Microsoft TFS&#xff1a;优点&#xff1a;任务版上能将需求、项目进度一览无余&#xff0c;对于小团队而言&#xff0c…

孙鑫mfc学习笔记第十四课

第十四课网络的相关知识&#xff0c;网络程序的编写&#xff0c;Socket是连接应用程序与网络驱动程序的桥梁&#xff0c;Socket在应用程序中创建&#xff0c;通过bind与驱动程序建立关系。此后&#xff0c;应用程序送给Socket的数据&#xff0c;由Socket交给驱动程序向网络上发…

Linux环境编译安装Mysql以及补装innodb引擎方法

mysql安装 5.6以后可能会收费&#xff0c;所以选择5.1以下从台湾中山大学镜像下载 1.首先要安装C编译环境 # yum install gcc-c 2.下载解压 # wget http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-5.1/mysql-5.1.73.tar.gz# tar zxvf mysql-5.1.73.tar.gz# cd mysql-5…

Python 炫技操作:合并字典的七种方法

来源 | Python编程时光&#xff08;ID: Cool-Python&#xff09;Python 语言里有许多&#xff08;而且是越来越多&#xff09;的高级特性&#xff0c;是 Python 发烧友们非常喜欢的。在这些人的眼里&#xff0c;能够写出那些一般开发者看不懂的高级特性&#xff0c;就是高手&am…

shell脚本编程基础(1)及RAID阵列

shell脚本&#xff1a;Linux从底层到上层的系统架构&#xff1a;硬件-->内核-->库(lib)-->shell-->用户。shell既是一种命令语言&#xff0c;也是程序设计语言&#xff08;shell脚本&#xff09;&#xff0c;作为一种命令语言&#xff0c;它提供了用户与内核的交互…

freemarker基本语法及实例

EG.一个对象BOOK 1.输出 ${book.name} 空值判断&#xff1a;${book.name?if_exists }, ${book.name?default(‘xxx’)}//默认值xxx ${ book.name!"xxx"}//默认值xxx 日期格式&#xff1a;${book.date?string(yyyy-MM-dd)} 数字格式&#xff1a;${boo…

前百度主任架构师创业,两年融资千万美元,他说AI新药研发将迎来黄金十年...

「AI技术生态论」 人物访谈栏目是CSDN发起的百万人学AI倡议下的重要组成部分。通过对AI生态专家、创业者、行业KOL的访谈&#xff0c;反映其对于行业的思考、未来趋势的判断、技术的实践&#xff0c;以及成长的经历。2020年&#xff0c;CSDN将对1000人物进行访谈&#xff0c;形…