关于6.828实验中的bootloader链接地址与加载地址的思考
2017-07-18 11:27
351 查看
bootloader的链接地址与加载地址不致会引起什么问题?
这个问题是我们所关心的,涉及到的其他相关知识读者可以自己去了解,不多解释了。1、bootloader如何进内存
这个工作由BIOS来完成,我们也可以根据这个过程来了解加载地址是如何确定的。明确:BIOS根据事先确定好的地址来加载bootloader。
2、bootloader链接地址与加载地址不一致情况下第一条指令如何执行
需要明确的是,什么不变,什么变了。这个地方的两种情况是:a、加载地址Addr_load、链接地址Addr_linkA(两者一致)。
b、加载地址Addr_load、链接地址Addr_linkB(两都不一致)。
这个过程我们修改了链接地址,加载地址不变。
两种情况下,bootloader第一条指令都能正确执行,问题是在b中,当机器碰到跳转指令时就会引起问题。
代码认为自己在某个位置,但实际上那个位置并没有自己想要的东西。再考虑每个cpu指令集不定长的情况,基于cpu取指、执行的工作模式,cpu大概率会取到不正确的指令,直接就挂了。
这个是基本情况,网上看了一些资料,感觉很多没有说清楚,所以把自己的观点贴出来。
图中是用qemu模拟加载bootloader的过程,其中:
加载地址是0x7c00,链接地址是0x7c04。
可以看到bootloader在0x7c00开始的指令都能正确执行,碰到ljmp指令的时候会挂。
这个指令的具体内容是:ljmp 0x8,0x7c36。
但是事实上这个地址并没有一个完整的x86指令。
相关文章推荐
- U-Boot中关于TEXT_BASE,代码重定位,链接地址相关说明
- 关于在帧中继fr环境下的NAT网络地址转换的实验
- 关于企业内部系统访问地址的一些思考
- 关于Java类加载双亲委派机制的思考(附一道面试题)
- 【Java进阶】关于Java类加载双亲委派机制的思考
- TCP长连接的思考和相关问题的实验_百万链接数测试_百万链接内核参数的调整
- TCP长连接的思考和相关问题的实验_百万链接数测试_百万链接内核参数的调整
- 位置无关码、位置有关码、链接地址、加载地址
- 关于HyperLink的NavigateUrl属性的链接地址带参数出错的问题
- 关于Linux驱动文件的加载以及相关符号的地址说明
- 链接地址,加载地址
- 运行地址,链接地址,加载地址,存储地址 位置无关码、位置有关码
- rails中关于评论或是帖子中链接地址的文本如何显示成超链接
- //屏蔽掉浏览器状态栏显示真是链接地址。使用此脚本时候,在页面最后面加载
- 关于Wincc 7.0 sp1 亚洲版的下载链接地址及授权,破解
- 关于一些优秀的链接地址
- 关于mysql的存储过程的使用权限的实验及思考
- UIWebView / NSURL / NSBoundle 相关应用 (实例,加载完成前的背景, 默认safari打开链接地址等)
- 关于jq版本的的在线链接地址
- 位置无关码、位置有关码、链接地址、加载地址