gpt4 book ai didi

assembly - 如何在 x86 实模式引导加载程序中初始化堆栈以防止与 BIOS 冲突?

转载 作者:行者123 更新时间:2023-12-04 11:26:53 27 4
gpt4 key购买 nike

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

我想选择堆栈的基位置B以便随着堆栈从 B 向下增长,我最终不会覆盖引导加载程序或 BIOS 使用的任何代码或其他内存。

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

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

另外,是否有任何关于初始ss:sp 的保证?正在指向,我可以在不设置新值的情况下安全使用多少堆栈空间?

最佳答案

通常,引导加载程序会将 ss:sp 设置为 00000h:07c00h:。我进行了网络搜索,显然当 BIOS 跳转到引导加载程序时 ss:sp 的设置取决于 BIOS。在 Microsoft MBR 的情况下,引导加载程序将 ss:sp 设置为 00000h:07c00h,并将其大部分代码传输到 00000h:00600h,并跳转到 00000h:006xxh。依次查看分区表以找到可引导扇区并重复该过程,加载并跳转到 00000h:07c00h。这可能会再重复一次。最终,引导过程将加载多个扇区并开始 Microsoft 操作系统的实际引导。我不知道 Linux 类型操作系统的顺序。

关于assembly - 如何在 x86 实模式引导加载程序中初始化堆栈以防止与 BIOS 冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61296865/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com