运行地址:程序定位的绝对地址,就是编译连接时定位的地址
加载地址:程序放置的地址
如果程序在flash中运行,运行地址和加载地址相同
如果程序存储在flash中运行而是在RAM中运行,则加载地址和运行地址就不同,此时加载地址就是指向flash,运行地址指向RAM
重定位的一点感悟:
重定位就是当程序的加载地址和运行地址不同时,运行地址通过在编译连接过程中的连接脚本完成将可执行文件链接到程序真实运行的地址位置(可以理解为将已经加载的程序复制一份到链接地址处)之后通过长跳转将PC指针从加载地址处重新定位到链接地址处。
简单理解为:就是对于位置有关码的操作因为一些迫不得已的运行需求程序必须转换到另一个地址空间运行,此时就需要对PC指针进行操作,将PC指针指向实际运行的位置处,这时也就需要复制一份代码到该运行地址也就是所谓的链接地址
重定位过程需要在位置有关码之前的一段位置无关码来完成。换句话说就是在长跳转之前就要完成重定位,否则会发生运行错误。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。