当前位置: 首页 > wzjs >正文

北京网站建设 义创怎么建设银行网站打不开

北京网站建设 义创,怎么建设银行网站打不开,广州防疫最新动态,做网站公司西安目录 一、前言 二、程序没有加载前的地址(程序) 三、程序加载后的地址(进程) 四、动态库的地址 一、前言 当我们创建一个进程的时候,进程里有一个进程地址空间,也会创建一个页表,页表里储存虚拟地址和物理地址的映射。 那什么是虚拟地址&a…

目录

一、前言

二、程序没有加载前的地址(程序)

 三、程序加载后的地址(进程)

四、动态库的地址


一、前言

当我们创建一个进程的时候,进程里有一个进程地址空间,也会创建一个页表,页表里储存虚拟地址和物理地址的映射。

那什么是虚拟地址,什么是物理地址呢?文件加载到内存时,CPU的作用是什么呢? 

二、程序没有加载前的地址(程序)

程序在编译好之后,内部有地址的概念吗?

有的,这些编译时的编址已经是平坦模式[0,4GB]。即它在编址的时候已经严格按照地址空间的方式进行编译代码的。

我们先来写一段代码看

objdump -S 可执行程序

这个指令可以帮我们把这个可执行程序反汇编出来。

在最左边为每个指令的地址,每个指令有不同的长度,像这个push一个长度,那么它下一个指令的地址就是这个指令地址+1。

我们自己画的一张图,这里的地址就是虚拟地址,也就是说可执行程序还没加载上去时候,已经是虚拟地址了,不过为了进行区分,在可执行程序还没有进行加载的时候,我们会把他叫做逻辑地址。也就是说逻辑地址一般是磁盘上可执行程序的地址。

 

 三、程序加载后的地址(进程)

当我们把可执行程序加载到内存的时候,会占用物理内存,所以当我们执行可执行程序的时候(该程序加载到内存中),这个程序拥有两套地址。

它有一套虚拟地址(逻辑地址),还有一套物理地址。

我们把可执行程序加载到内存,肯定是要经过CPU运算的,那CPU如何读取到我们这个可执行程序呢?也就是如何获取这个程序的第一条指令呢?

其实我们在形成可执行程序时,已经用虚拟地址编好了,加载到内存之前,有一个入口地址entry。

当内核数据结构形成以后,我们可以将代码先加载到内存,当然也可以先不加载,我们这里先认为没有加载。它会先读取可执行程序的一些东西,将可执行程序的入口地址entry放到EIP/PC寄存器中。因为这个正好就是一个虚拟地址,所以就可以直接去正文代码中开始执行了,然后开始读取页表。

然后此时我们现在的页表并没有建立映射,那么就会产生缺页中断,就会将程序加载进去,然后它也就天然具有了物理地址。最终虚拟物理地址的映射在页表中也都有了

CPU执行一条指令的时候,分为五个阶段

  1. 取指令
  2. 指令译码
  3. 执行指令
  4. 访存取数
  5. 结果写回

结果写回阶段,把执行指令阶段的运行结果数据“写回”到某种存储形式:结果数据经常被写到 CPU 的内部寄存器中,以便被后续的指令快速地存取 。我们不断执行指令取到下一条指令,取到的这些指令的地址都是虚拟地址,因为该可执行文件在未加载到内存中有一份逻辑地址(虚拟地址),这份地址给CPU读取执行取指令等一系列操作。 


这里CPU读取指令的虚拟地址,这个虚拟地址也在进程地址空间的正文代码里,并把虚拟地址存放到页表里,如果并没建立映射,发生缺页中断,直到磁盘中的可执行程序以4kb大小加载到内存中,加载到内存之后,有自己的物理地址,并在页表发生映射。然后再把下一条指令的地址给给CPU运算,再发生映射。

CPU与进程地址空间与加载到物理内存中的文件汇编指令的虚拟地址和物理地址的映射,CPU不断读,在页表不断映射,不断循环。直至可执行程序结束

四、动态库的地址

我们之前讲过动态库是共享库,加载到内存中,每个进程都能使用。它加载到进程的共享区里的。

我们先了解一下什么是绝对地址和相对地址

像这样的地址就是绝对地址

还有一种地址是相对地址,或者称作逻辑地址,比如下面的例子,有一个100米的跑道,有一颗树在40m处,那么当我们处于50m处的时候,我们可以说绝对地址是50,也可以说相对地址是10。

但是当这个树就在0处的时候,那么绝对地址就是相对地址或者逻辑地址

我们的.exe文件需要用到动态库的printf函数时,它也需要被加载到动态库中。

我们现在这个0x1122这个地址是一个线性地址,我们的程序要跳转到对应的位置,它在共享库中也必须在对应的位置,即0x1122,否则找不到。

一个进程可能要有10几个库,那怎么能加载到固定位置呢?

如果要加载到固定位置,需要的成本非常的大。

我们可以让库在虚拟内存中任意位置加载,并且在库中让内部函数不要采用绝对编址,只表示每个函数在库的偏移量即可。 

在进程地址空间我们只要拿到动态库的起始地址即可,库的起始地址+偏移量就能找到库中函数的位置。

所以在动态库形成.o文件的时候,采用fPIC:与位置无关码。

这就代表着直接用偏移量对库中的函数进行编址。

http://www.dtcms.com/wzjs/787988.html

相关文章:

  • 牙科医院网站设计怎么做wordpress页面加载慢
  • 做平面设计必看的网站公司单位电话号码大全
  • 网站建设需要的客户资料哈尔滨市建设工程招标网
  • 学院网站建设情况广州外贸型网站
  • 移动端网站模板哈尔滨干肠制作
  • 淄博网站设计公司北京建站程序
  • 精品成品网站入口企业营销型网站有特点
  • 王者做网站百度推广计划
  • 做网站用的图标星巴克已有的网络营销方式
  • 深圳建设网站公司排名网站开发的岗位
  • 外国茶网站建设wordpress男同
  • 800元建网站网站商城html模板
  • 做网站运营需要具备哪些能力网站建设费用是什么科目
  • 蛇口网站建设Wordpress 普通图片裁剪
  • 如何利用div做网站南昌做网站排名
  • 东莞免费做网站公司邢台做移动网站公司电话
  • 黑icp 网站建设河北省企业网站建设公司
  • google移动网站建站十大原则安徽工程建设信息网站6
  • 做搜狗网站优wordpress 动态文字
  • 雄安免费网站建设电话网站开发用什么框架好
  • 网站建设的用处南平摩托车罚款建设网站缴费
  • 云南建设学院的网站大丰seo排名
  • 双线主机可以做彩票网站吗网站备案有什么要求吗
  • 个人外贸网站做电信宽带合适做网站吗
  • 网站建设 后台电子商务网站开发课程
  • 无锡网站建设报价明细表网络营销相关的岗位有哪些
  • 蓝德网站建设关键词优化搜索引擎
  • 个人如何建立免费手机网站兰州新站点seo代理
  • 网站页面设计原则自己做的网站怎么用qq登入
  • 葫芦岛市住房和城乡建设局网站logo设计商标设计