第013课_代码重定位

第013课 代码重定位

1. 段的概念_重定位的引入

2. 链接脚本的引入与简单测试
参考资料:
Using LD, the GNU linker
http://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_mono/ld.html

3. 链接脚本的解析

4. 拷贝代码和链接脚本的改进
a. 拷贝代码要改进
b. 链接脚本要改进

5. 代码重定位与位置无关码
怎么写位置无关的程序:
使用位置无关码! 不使用绝对地址! 最根本的办法是看反汇编
a. 调用程序时使用B/BL相对跳转指令
b. 重定位之前, 不可使用绝对地址,比如:
不可访问全局变量/静态变量
不可访问有初始值的数组(因为初始值放在rodata里,使用绝对地址来访问)
c. 重定位之后, 使用绝对跳转命令跳到Runtime Addr,比如:
ldr pc, =main

6. 重定位_清除BSS段的C函数实现

C代码中如何使用链接脚本中定义的变量
http://www.100ask.org/bbs/forum.php?mod=viewthread&tid=16231&highlight=%C1%B4%BD%D3%BD%C5%B1%BE

参考文章:https://sourceware.org/ml/binutils/2007-07/msg00154.html

C函数怎么使用lds文件中的变量abc?
a. 在C函数中声明改变量为extern类型, 比如:
extern int abc;

b. 使用时, 要取址, 比如:
int *p = &abc; // p的值即为lds文件中abc的值

作业:
(1).使用printf函数打印以下信息:
volatile unsigned int *dest = (volatile unsigned int *)&__code_start;
volatile unsigned int *end = (volatile unsigned int *)&__bss_start;
volatile unsigned int *src = (volatile unsigned int *)0;
a. 打印dest, end, src的值
b. 打印dest, end, src所指向的地址的值

(2). 修改链接脚本,把程序重定位到0x32000000
再观察上述打印结果

posted on 2018-03-10 16:46 Dream998 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/Dream998/p/8540612.html

第013课_代码重定位相关推荐

  1. C语言重新定位文件,C语言代码重定位 (原创)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 原贴:http://hi.baidu.com/ciw%5Fblue/blog/item/ec2cc251998c07888d543054.html 许多人 ...

  2. S5PV210体系结构与接口04:代码重定位 SDRAM初始化

    目录 1. C语言环境初始化 1.1 C语言运行所需环境 1.2 初始化栈 1.2.1 栈的概念 1.2.2 栈的作用 1.2.3 如何初始化 1.3 初始化bss段 1.3.1 bss段的作用 1. ...

  3. Tiny4412裸机程序之代码重定位初体验

    转载:http://www.techbulo.com/1412.html 从前面一节Exynos 4412的启动过程分析 ,我们知道:一上电,exynos4412首先执行固化在IROM中的代码,iRO ...

  4. Linux从头学06:16张结构图,彻底理解【代码重定位】的底层原理

    作 者:道哥,10+年的嵌入式开发老兵. 转 载:欢迎转载文章,转载需注明出处. 文章目录 程序的结构 1. 程序头(Header)的描述信息 2. 关于汇编地址 bootloader 把程序从硬盘读 ...

  5. 免疫性属于计算机病毒特征码,基于免疫和代码重定位的计算机病毒特征码提取与检测方法.doc...

    基于免疫和代码重定位的计算机病毒特征码提取与检测方法 基于免疫和代码重定位的计算机病毒特征码提取与检测方法 张瑜 LIU Qing-zhong 宋丽萍 罗自强 曹均阔 海南师范大学信息学院 Depar ...

  6. 共享可写节包含重定位_理解重定位

    一.段的概念 段是程序的组成元素.将整个程序分成一个一个段,并且给每个段起一个名字,然后在链接时就可以用这个名字来指示这些段,使得这些段排布在合适的位置. 一个程序通常包含以下五个段: 代码段(.te ...

  7. Tiny6410之重定位代码到SDRAM

    在上一章中,将代码重定位到了SRAM中,但是这样的做法作用不大.正确的做法的是将代码重定位到更大的主存中,即DRAM.Tiny6410的DRAM控制寄存器最多只能支持两个同一类型的芯片.每个芯片最多可 ...

  8. 嵌入式裸机课程之C语言程序调用和重定位学习笔记

    一.汇编写启动代码之关看门狗 前期准备工作 1.1 什么是看门狗 看门狗(watchdog timer)电子设备经常会跑飞或者死机(譬如极端炎热.极端寒冷.工业复杂场合) 这种情况我们需要设备自动复位 ...

  9. tiny4412 裸机程序 六、重定位代码到IRAM+0x8000【转】

    本文转载自:http://blog.csdn.net/eshing/article/details/37115697 一.重定向 对于程序而言,我们需要理解两个概念,一是程序当前所处的地址,即程序在运 ...

最新文章

  1. 他山之石:Github的使用
  2. 零知识证明实践教程,第一部分
  3. 车小米O2O保养平台搭建完毕
  4. linux安装mysql5.7.18_Linux 安装MySQL5.7.18
  5. MySQL常用存储引擎之MyISAM
  6. PHP反射之类的反射
  7. 数据结构基础学习(一)数组
  8. 浅谈Flutter UI布局
  9. Java 网络爬虫,就是这么的简单
  10. win hook codeproject
  11. 小程序模仿蚂蚁森林浇水demo,树木浇水
  12. JDBC execute常用方法
  13. 软件工程课程设计分组与选题名单
  14. 电脑连接手机热点时,电脑能够搜到但是却连接不上的问题
  15. 新冠肺炎的中西医结合康复方案
  16. VS2019 - 动态库的编写和调用
  17. java:Cassandra入门与实战——下
  18. WebServer报错Unexpected wrapper element
  19. 江汉大学计算机学院有研究生院,江汉大学研究生招生信息网_江汉大学考研信息网-研究生招生报名查询系统...
  20. C语言 用switch语句实现多分支选择结构

热门文章

  1. XenApp6 建立请求的连接时出错解决方法
  2. spring boot configuration annotation processor not found in classpath问题解决
  3. Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
  4. saleor的生产环境部署-失败记录
  5. 台式电源GX450的开关O和-到底什么意思
  6. 肺癌图片识别的相关信息
  7. 宽带651以及光猫红色灯闪烁-故障维修
  8. Running /usr/bin/wineserver -w. This will hang until all wine processes XXXX terminate
  9. Exception in thread main java.lang.NoSuchMethodError
  10. ValueError: You are trying to load a weight file containing 12 layers into a model with 2 layers.