• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > 三一重工中联重科如何计算重定位中的运行时存储地址

三一重工中联重科如何计算重定位中的运行时存储地址

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了三一重工 中联重科,三一重工vs中联重科,三一重工收购中联重科,中联重科收购三一,徐工 三一 中联重科等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:三一重工 中联重科 如何计算重定位中的运行时存储地址
描述:

在看CSAPP第二版的时候看到第七章,有道题的题目是

图7-10中的swap程序包含5个重定位的引用,对于每个重定位的引用,给出他们在7-10中的行数,运行时存储地址和值

在网上看到的答案是(不知道是否正确)

 Line # in Fig. 7.10       Address        Value
      15(bufp0)          0x080483CB    0x0804945c
      16(buf[1])         0x080483D0    0x08049458 
      18(bufp1)          0x080483D8    0x08049548
      18(buf[1])         0x080483DC    0x08049458
      23(bufp1)          0x080483E7    0x08049548
      

书前的例子关于绝对重定位太含糊其词了,关于地址只有关于buf的,但是我没出来和答案中address的联系,想问下,答案中的address是如何求出来的


解决方案1:

图 7.19 不是已经给出答案了吗?

所谓的重定位是在链接阶段才确定的地址部分,这里重定位是 R_386_32 类型,也就是说不需要进行额外计算,直接把确定后的32位值填入指令对应位置即可。

比如图 7.10 中的第15行的指令: mov 0x0804945c, %edx, 其指令地址(PC)是 80483c9 ~ 80483ce 这6个字节,对应指令的值分别是 8b 15 5c 94 04 08,以上是重定位之后的结果;
重定位之前对应的信息在 7.19 第3行,指令是 mov 0, %edx, 由于这时还不知道bufp0的值,所以指令中包含bufp0地址的部分先填0,这时的指令6字节分别是 8b 15 00 00 00 00, 所以确定了后面4个字节 00 就是填入的重定位值,所以15行的重定位地址就是 指令PC+2字节偏移, 即 80483c9 + 2 = 80483cb ; 对应的值就是后面4个字节的内容 5c 94 04 08,这里的顺序是从低地址到高地址,变成32位数就是 0x0804945c。说明第一项答案是正确的。

同理可以计算验证后面4项的答案。

不知这样说是否明白?

======

下载了原书重新看了一下这道题目,其实很简单,7-19 已经把 5 个 reloc 项和它相对于swap的相对地址给出了,比如 3: R_386_32 bufp0,address 值其实就是 swap 地址 + 3, value 值就是 bufp0 的地址,而 swap 和 bufp0 可以直接从 7-10 中查到,分别是 0x080483c8 和 0x0804945c,所以第一项答案就是 :
Address = swap + 3 = 0x080483cb, Value = 0x0804945c .


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 三一重工中联重科如何计算重定位中的运行时存储地址

相关文章

  • 2017-06-05 MC9S12G96的SCI通信问题
  • 2017-06-05 智能硬件智能硬件
  • 2017-06-05 WinCE60不能安装pocketSOAParmCAB
  • 2017-06-05 Ajax调用lua脚本导致iconv不能正常运行的问题
  • 2017-06-05 求一个软件模拟I2C代码(STM32F2XX)
  • 2017-06-05 自定义scatter文件,程序进入HardFault_Handler
  • 2017-06-05 谁有《Windows2000DDKDocumentation》电子文档?
  • 2017-06-05 uC/OS-II做嵌入式开发!!我就是找不到LIB库啊??
  • 2017-06-05 100分求教USB的IRP中各成员详解?
  • 2017-06-05 IARfor430编译器中#definedo{}while(0)问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 如何设置窗体居中?
    • LPC4337IAP在线升级问题。
    • PPP协议SOS
    • at91sam9263linux的文件系统出了问题,貌似跟nandflash有关,不知道从哪下手,希望各位有经验的给提供帮助,谢谢。
    • IAR编译时的问题
    • 请问哪里有《实时UML——开发嵌入式系统高效对象(第二版)》下载啊
    • 开发一套国产PLC在国内有市场吗?
    • 有没有高质量,采用任播技术,支持GeoDNS的DNS服务?
    • GUI显示GIF动图求解
    • git克隆下的工程出问题了

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有