精华内容
下载资源
问答
  • 重定位

    2013-02-18 10:29:11
    重定位有两种分别是动态重定位与静态重定位  二、分类  1、静态重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次...
    一、定义:重定位就是把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程,也就是说在装入时对目标程序中指令和数据的修改过程。他是实现多道程序在内存中同时运行的基础。重定位有两种,分别是动态重定位静态重定位
    
      二、分类
      1、静态重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变,故成为静态重定位。
      2、动态重定位:它不是在程序装入内存时完成的,而是CPU每次访问内存时 由动态地址变换机构(硬件)自动进行把相对地址转换为绝对地址。动态重定位需要软件和硬件相互配合完成。
      三、时机
      将逻辑地址空间重定位到物理地址空间的时机有三种:
      1、程序编译连接时。
      2、程序装入内存时。
      3、程序执行时。
      四、扩展阅读:
     

    地址重定位就是操作系统将逻辑地址转变为物理地址的过程。。。也就是对目标程序中的指令和数据进行修改的过程

    将逻辑地址空间重定位到物理地址空间的时机有三种:

      1、程序编译连接时。
      2、程序装入内存时。
      3、程序执行时。


    以下内容转自:http://bbs.pediy.com/showthread.php?t=76876

      在这之前我一直对地址重定位的细节不是很了解。以下文章摘自《操作系统原理DOS篇(第二版)》。是我目前看过的关于重定位的最好的文章。与大家分享 一下。
      以下介绍程序是如何装入内存,从而变成在计算机内可执行的形式的。
      在用汇编语言或高级语言编写的程序中,是通过符号名来访问子程序和数据的,我们把程序中符号名的集合叫做“名字空间”。汇编语言源程序经过汇编,或者高级语言源程序经过编译,得到的目标程序是以“0”作为参考地址的模块,然后多个目标模块由连接程序连接成一个具有统一地址的装配模块,以便最后装入内存中执行。我们把
    目标模块obj中的地址称为相对地址(或逻辑地址),而把相对地址的集合叫做“相对地址空间”或简单地叫做“地址空间”。
      装配模块虽然具有统一的地址空间,但它仍是以“0”作为参考地址,即是浮动的。要把它装入内存执行,就要确定装入内存的实际物理地址,并修改程序中与 地址有关的代码,这一过程叫做地址重定位。
      地址空间的程序和数据经过地址重定位处理后,就变成了可由CPU直接执行的绝对地址程序。我们把这一地址集合称为“绝对地址空间”或“存储空间”。

      地址重定位完成的相对地址转换成内存的绝对地址工作又称为地址映射(map)、按照重定位的时机,可分为静态重定位和动态重定位。


    一、静态重定位
      静态重定位是在程序执行之前进行重定位,它根据装配模块将要装入的内存起始位置,直接修改装配模块中的有关使用地址的指令。
      例如,一个以“0”作为参考地址的装配模块,要装入以100为起始地址的存储空间。显然,在装入之前要做某些修改,程序才能正确执行。例如,MOV  EAX,[500]这条指令的意义,是把相对地址为500的存储单元内容1234装入EAX号累器。现在内容为1234的存储单元的实际地址为1500, 即为相对地址(500)加上装入的地址(1000),因此,MOV EAX,[500]这条指令中的直接地址码也要相应地加上起始地址,而成为MOV  EAX,[1500]。
      程序中涉及直接地址的每条指令都要进行这样的修改。需要修改的位置称为重定位项,所做的加实际装入模块起始地址修改中的块起始地址称为重定位因子。
      为支持静态重定位,连接程序在生成统一地址空间和装配模块时, 应产生一个重定位项表,连接程序此时还不知道装配模块将要装入的实际位置,故重定位表 所给出的需修改位置是相对地址所表示的位置。
      操作系统的装入程序要把装配模块和重定位项表一起装入内存。由装配模块的实际装入起始地址得到重定位因子,然后实施如下两步:
      (1)取重定位项,加上重定位因子而得到欲修改位置的实际地址;
      (2)对实际地址中的内容再做加重定位因子的修改,从而完成指令代码的修改。
      对所有的重定位项实施上述两步操作后,静态重定位才完成,尔后可启动程序执行。使用过的重定位项表内存副本随即被废弃。
      静态重定位有着无需硬件支持的优点,但存在着如下的缺点:一是程序重定位之后就不能在内存中搬动了;二是要求程序的存储空间是连续的,不能把程序放在若干个不连续的区域内。

    二、动态重定位
      动态重定位是指,不是在程序执行之前而是在程序执行过程中进行地址重定位。更确切地说,是在CPU每次访问内存单元前才进行地址变换。动态重定位可使装配模 块不加任何修改而装入内存,但是它需要硬件——定位寄存器的支持。
      程序的目标模块装入内存时,与地址有关的各项均保持原来的相对地址不进行任何修改。如MOV 1,[500]这条指令仍是相对地址500。当此模块被 操作系统调度到处理机上执行时,操作系统将把此模块装入的实际起始起始地址减去目标模块的相对基地址,然后将其差值装入定位寄存器中。当CPU取得一条访 问内存的指令时,地址变换硬件逻辑自动将指令中的相对地址与定位寄存器中的值相加,再依此和值作为内存绝对地址去访问该单元中的数据。
      由此可见,进行动态重定位的时机是在指令执行过程中,每次访问内存前动态地进行。采取动态重定位可带来两个好处:
      (1)目标模块装入内存时无需任何修改,因而装入之后再搬迁也不会影响其正确执行,这对于存储器紧缩、解决碎片问题是极其有利的;
      (2)一个程序由若干个相对独立的目标模块组成时,每个目标模块各装入一个存储区域,这些存储区域可以不是顺序相邻的,只要各个模块有自己对应的定位寄存器就行。

      动态重定位技术所付出的代价是需要硬件支持。


    总结:

    静态地址重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变,故成为静态重定位。

    优点:无需硬件支持

    缺点:1)程序重定位之后就不能在内存中搬动了;2)要求程序的存储空间是连续的,不能把程序放在若干个不连续的区域中。

     

    动态地址重定位:不是在程序执行之前而是在程序执行过程中进行地址重定位。更确切的说,是在每次访问内存单元前才进行地址变换。动态重定位可使装配模块不加任何修改而装入内存,但是它需要硬件一定位寄存器的支持。

    优点:1)目标模块装入内存时无需任何修改,因而装入之后再搬迁也不会影响其正确执行,这对于存储器紧缩、解决碎片问题是极其有利的;2)一个程序由若干个相对独立的目标模块组成时,每个目标模块各装入一个存储区域,这些存储区域可以不是顺序相邻的,只要各个模块有自己对应的定位寄存器就行。

    缺点:需要硬件支持。

    展开全文
  • 把逻辑地址转换为内存物理地址的过程称为重定位   重定位编辑 本词条缺少信息栏、名片图,补充相关内容使词条更完整,还能快速...重定位有两种分别是动态重定位与静态重定位。 目录 1分类 2时机 3扩展阅读

    把逻辑地址转换为内存物理地址的过程称为重定位

     

    重定位编辑

    本词条缺少信息栏名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!

    重定位就是把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程,也就是说在装入时对目标程序中指令和数据的修改过程。他是实现多道程序在内存中同时运行的基础。重定位有两种,分别是动态重定位静态重定位

    目录

    1分类编辑

    1静态重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变,故成为静态重定位。

    2动态重定位:它不是在程序装入内存时完成的,而是CPU每次访问内存时动态地址变换机构(硬件)自动进行把相对地址转换绝对地址。动态重定位需要软件和硬件相互配合完成。

    2时机编辑

    逻辑地址空间重定位到物理地址空间的时机有三种:

    1程序编译连接时。

    2、程序装入内存时。

    3、程序执行时。

    3扩展阅读:编辑

    重定位是由操作系统安排的。

    装入程序前,系统会计算未使用的内存,然后将程序装入,并记下开始地址。在执行有相对地址的指令时,会将所有的地址加个刚才记下的开始地址,就叫重定位。

    重定位与EXE文件无关,它是程序装入时的一种方式。利用重定位可提高内存空间的使用率。

     

    展开全文
  • 重定位有两种分别是动态重定位与静态重定位。 静态重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变,故...

    重定位就是把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程。它是实现多道程序在内存中同时运行的基础。重定位有两种,分别是动态重定位与静态重定位。

    • 静态重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变,故成为静态重定位。
    • 动态重定位:它不是在程序装入内存时完成的,而是CPU每次访问内存时,由动态地址变换机构(硬件)自动进行把相对地址转换为绝对地址。动态重定位需要软件和硬件相互配合完成。

    转载于:https://www.cnblogs.com/luoleqi/p/10834894.html

    展开全文
  • 重定位有两种分别是动态重定位与静态重定位 二、分类 1、静态重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,...
    一、定义:重定位就是把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程,也就是说在装入时对目标程序中指令和数据的修改过程。他是实现多道程序在内存中同时运行的基础。重定位有两种,分别是动态重定位静态重定位
    二、分类
    1、静态重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变,故成为静态重定位。
    2、动态重定位:它不是在程序装入内存时完成的,而是CPU每次访问内存时 由动态地址变换机构(硬件)自动进行把相对地址转换为绝对地址动态重定位需要软件和硬件相互配合完成。
    三、时机
    逻辑地址空间重定位到物理地址空间的时机有三种:
    1、程序编译连接时。
    2、程序装入内存时。
    3、程序执行时。
    四、扩展阅读:
    重定位是由操作系统安排的。
    装入程序前,系统会计算未使用的内存,然后将程序装入,并记下开始地址。在执行有相对地址的指令时,会将所有的地址加个刚才记下的开始地址,就叫重定位。
    重定位与EXE文件无关,它是程序装入时的一种方式。利用重定位可提高内存空间的使用率。


    通常IDA对一个PE文件逆向出来的代码中,


    存在四个最基本的段text、idata、rdata、data,


    四个段为PE文件的结构中对应的段。


    一、text段:


    该段位程序代码段,在该段一开始就可以看到:


    .text:00401000 ; Segment type: Pure code
    .text:00401000 ; Segment permissions: Read/Execute


    这里的段类型跟权限说明很清楚: 分别为代码段和可读可执行。需要注意的是,borland这里叫做code,而不是text 


    二、idata、rdata、data段


    从命名上可以看出,三个段全为存放特殊数据的段,但IDA根据PE文件的格式将数据段中不同类型的数据区分开来。


    VC 开发工具将INC,LIB,RES放在数据段,DELPHI也类似,同时由于Delphi的窗体文件*.dfm在源代码中使用编译指令{$R *dfm}作为res资源放在数据段中,因此像delphi的反汇编工具dede就根据这些窗体资源数据,分析出相当清晰的源代码与窗体事件的对应地址, 当然实现代码还是汇编代码。


    1) idata段:


    该段在一开始一般有类似下面的说明:


    .idata:0049B000 ; Section 2. (virtual address 0009B000)
    .idata:0049B000 ; Virtual size : 0001717E ( 94590.)
    .idata:0049B000 ; Section size in file : 00018000 ( 98304.)
    .idata:0049B000 ; Offset to raw data for section: 0009B000
    .idata:0049B000 ; Flags 40000040: Data Readable
    .idata:0049B000 ; Alignment : default
    .idata:0049B000 ;
    .idata:0049B000 ; Imports from ADVAPI32.dll
    .idata:0049B000 ;
    .idata:0049B000 ; ===========================================================================
    .idata:0049B000
    .idata:0049B000 ; Segment type: Externs
    .idata:0049B000 ; _idata


    明显是一个Imports函数的代码段,这里集中所有外部函数地址,代码中会先跳到该地址后再执行,PE文件加载器在开始会获取真实的函数地址来修补idata段中的函数地址。


    与之对应的exports是edata,


    表面上看PE文件对该段的定位是特殊数据段。


    2)rdata段


    名字上看就是资源数据段,程序用到什么资源数据都在这里,资源包括你自己封包的,也包括开发工具自动封包的。


    3)data段


    这个段存放程序的全局数据、全局常量等。

    4,reloc段是重定位段



    展开全文
  • Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会一个相对应...
  • 主要内容C#开发环境的使用、C#语言基础应用、字符串处理技术、数组和集合的使用、面向对象编程技术、数据结构与算法、Windows窗体基础、特色窗体界面、窗体控制技术、MDI窗体和继承窗体、Windows常用控件的使用、...
  • 基本分为两种: | 方案 | 特点 | | ------ | ------------------------------------------------------------ | | 构建时 | 子应用通过 Package Registry (可以是 npm package,也可以是 git tags 等...
  • Java EJB中、无状态SessionBean的个例子 个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在状态SessionBean中,用...
  • Java EJB中、无状态SessionBean的个例子 个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在状态SessionBean中,用...
  • 4.支持程序浮动的地址转换机制是( A、动态重定位 ) A、动态重定位 B、段式地址转换 C、页式地址转换 D、静态重定位 5.在可变分区存储管理中,最优适应分配算法要求对空闲区表项按( C )进行排列。 A、地址从大到小 ...
  • C++网络爬虫项目

    2018-07-04 00:59:17
    综合以上两种考虑,前台系统对网页进行排序,作为搜索的最终结果。 除了上述功能模块,搜索引擎的“反作弊”模块近年来越来越受到重视。搜索 引擎作为互联网用户上网的入口,对于网络流量的引导和分流至关重要,甚至...
  • •重定位:将逻辑地址转换为物理地址。 •虚拟存储管理 虚存是由操作系统调度,采用内外存的交换技术,各道程序在必需使用时调入内存,不用的调出内存,这样好象内存容量不受限制。 虚存的特点: ...
  • java 面试题 总结

    2009-09-16 08:45:34
    Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会一个相对应...
  • 1、( )了动态重定位机构,作业地址空间的代码就可以原封不变的装入到给定的内存中。 2、( )任一时刻,若执行状态的进程,就一定就绪状态的进程。 3、( )文件系统中,设置OPEN操作的目的是为了将文件复制...
  • 仔细比较两种数据的差别,发现出现主机复位问题的数据中DSL板配置了MNT/MLT端口,但是没有做DSL端口之间的半永久数据。 于是在程序中不断加打印语句,通过后台的DBWIN调试程序跟踪,最后终于定位为:每当执行到...
  • 支持两种数据源,一种是串口和网络通过协议采集设备数据,一种是数据库采集。数据库采集模式可以作为通用的系统使用。 自带设备模拟工具,支持16个设备数据模拟,同时还带数据库数据模拟,以便在没有设备的时候测试...
  • ② 每一个结点最多有两棵子树,且分别称为该结点的左子树和右子树。 在二叉树中,每一个结点的度最大为2,即所有子树(左子树或右子树)也均为二叉树。另外,二叉树中的每个结点的子树被明显地分为左子树和右子树。 ...
  • 两种情况下可能会选择单体架构:一是在企业发展的初期,为了保证快速上线,采用此种方案较为简单灵活;二是传统企业中垂直度较高, 访问压力较小的业务。在这种模式下对技术要求较低,方便各层次开发人员接手,也...
  • 操作系统实验

    2013-12-30 11:30:48
    当此程序运行时,在系统中一个父进程和其余为子进程在活动。 (2)进程的控制:在程序中使用系统调用lockf()来给每一个进程加锁,实现进程之间的互斥。 (3)进程通信:①软中断通信;②在程序中使用实例signal(SIGINT...
  • 另外,大部分 Spring Boot 项目只需要少量的配置即可,这别于 Spring 的配置。 SOFABoot :SOFABoot 基于 Spring Boot ,不过在其基础上增加了 Readiness Check,类隔离,日志空间隔离等等能力。 配套提供的...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    <br>实验二 单链表结构及计算 实验目的: 通过实验掌握下列知识: 1、熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现; 2、继续熟悉VC编程、编译和调试环境; 内容及步骤:...
  • 2004-2010软考程序员真题

    热门讨论 2012-09-27 12:33:00
    51、在WINDOW98中,有两个对系统资源进行管理的程序组,它们"资源管理器"和  A)"回收站" B)"剪贴板" C)"我的电脑" D)"我的文档"  52、在WINDOW98中,下列正确的文件名是  A)MY PRKGRAM GROUP.TXT B)FILE1|...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    答: MCU从生产出来到封装出货的每个不同的阶段会有不同的测试方法,其中主要会有两种:中测和成测。 所谓中测即是WAFER的测试,它会包含产品的功能验证及AC、DC的测试。项目相当繁多,以HOLTEK-p....
  • 可以设置为自动等比例缩放(contain和cover两种模式),也可以设置为拉伸(stretch模式)来铺满窗口。 图表的配置项抽取各层级公用部分,以对象的合并方式(jQuery的extend方法)实现最简配置。 窗口缩放时图表自动缩放...
  • 7.4 可重定位目标文件 7.5 符号和符号表 7.6 符号解析 7.7 重定 7.8 可执行目标文件 7.9 加载可执行目标文件 7.10 动态链接共享库 7.11 从应用程序中加载和链接共享库 7.12 *与位置无关的代码(PIC) 7.13...
  • 7.添加资源有两种方法。一种是直接添加系统提供的资源文件,然后选择所需图 标。另一种是自己写资源文件。我们主要介绍第一种。新建Qt Resources file, 将它命名为menu。其他默认。 8.添加完后如下图。可以看到添加...
  • v55.xx 鸿蒙内核源码分析(重定位篇) | 与国际接轨的对外部发言人 | 51 .c .h .o v54.xx 鸿蒙内核源码分析(静态链接篇) | 完整小项目看透静态链接过程 | 51 .c .h .o v53.xx 鸿蒙内核源码分析(ELF解析篇) | 你要...

空空如也

空空如也

1 2 3
收藏数 55
精华内容 22
关键字:

地址重定位有两种分别是