假设我要将堆栈初始化为S字节大小。
我希望选择堆栈B的基本位置,这样当堆栈从B向下增长时,我就不会覆盖引导加载程序或BIOS使用的任何代码或其他内存。
由于我是自己编写引导加载程序(初始MBR扇区加载到线性地址0x7c00),防止与引导加载程序冲突似乎是一个精心规划的问题。
如何知道BIOS代码所在的位置,以及我的堆栈是否正在覆盖BIOS?所使用的任何内存。
另外,是否可以保证初始ss:sp指向的位置,以及在不设置新值的情况下可以安全地使用多少堆栈空间?
发布于 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类型操作系统的顺序。
https://stackoverflow.com/questions/61296865
复制相似问题