首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在x86实模式引导程序中初始化堆栈以防止与BIOS发生冲突?

问如何在x86实模式引导程序中初始化堆栈以防止与BIOS发生冲突?
EN

Stack Overflow用户
提问于 2020-04-18 22:04:01
回答 1查看 268关注 0票数 5

假设我要将堆栈初始化为S字节大小。

我希望选择堆栈B的基本位置,这样当堆栈从B向下增长时,我就不会覆盖引导加载程序或BIOS使用的任何代码或其他内存。

由于我是自己编写引导加载程序(初始MBR扇区加载到线性地址0x7c00),防止与引导加载程序冲突似乎是一个精心规划的问题。

如何知道BIOS代码所在的位置,以及我的堆栈是否正在覆盖BIOS?所使用的任何内存。

另外,是否可以保证初始ss:sp指向的位置,以及在不设置新值的情况下可以安全地使用多少堆栈空间?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-19 00:45:55

通常,引导加载程序将ss:sp设置为00000h:07c00h:。我做了一个web搜索,很明显,当BIOS跳转到引导加载程序时,ss:sp设置为什么取决于BIOS。对于Microsoft,引导程序将ss:sp设置为00000h:07c00h,并将大部分代码传输到00000h:00600h,然后跳转到00000h:006xh。然后查看分区表以找到可引导扇区,并重复进程,加载并跳转到00000h:07c00h。这可能会再重复一次。最终,引导过程将加载多个扇区,并启动Microsoft操作系统的实际启动。我不知道Linux类型操作系统的顺序。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61296865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档