关于重定位代码的浅显理解-创新互联

首先需要朱有鹏老师,这是在学习了朱老师的课程之后的一点理解,代码是根据朱老师的源码学习之后编写的。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:申请域名虚拟主机、营销软件、网站建设、乌鲁木齐网站维护、网站推广。

关于重定位代码的浅显理解

根据反汇编代码 d0024010:   e24f0018    sub    r0, pc, #24 可以看出通过adr汇编伪指令将加载地址写入r0寄存器,此时因为adr指令采用相对寻址的寻址方式所以adr实际写入r0寄存器的地址为程序的加载地址而非反汇编代码所指示的0xd0024000,通过ldr伪指令将所需重定位的地址写入r1寄存器,此时r1所存的地址为0xd0024064,该地址的内容为d0024000即为重定位的起始地址.由ldr伪指令将bss段的起始地址符号bss_start写入r2寄存器,当r0和r1相等时表示加载地址和重定位地址为同一地址,所以不会进行重定位的相关操作,而是跳转到清理bss段为C代码的运行建立环境:如果r0和r1不相等,就表示加载地址与实际运行地址不同,所以需要进行重定位以保证代码在运行时不会出现错误。所谓的重定位就是将加载地址处的代码拷贝一份到实际运行位置处,所以在.S代码的copy_loop就是将代码从加载地址处拷贝到实际运行处。在清理完bss为C代码建立好运行环境后通过ldr pc, =led_flash ,ldr长跳转到C代码的流水灯程序中。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页标题:关于重定位代码的浅显理解-创新互联
本文链接:http://abwzjs.com/article/cssjpi.html