首页 > 解决方案 > 在 x86-64 上启用长模式和分页后,堆栈指针是否包含虚拟地址或物理地址

问题描述

我正在从头开始编写一个最小的操作系统。我启用了分页和长模式,但是当我想设置堆栈时,我有几个问题。

  1. 堆栈指针是否包含在使用 PUSH、POP 指令时由 MMU 自动转换为物理地址的虚拟地址?

  2. 堆栈的位置是否在 ELF 文件中提及?

标签: stackx86-64elfbootloader

解决方案


启用分页后,堆栈指针必须是虚拟地址。

标准的 x86-64 psABI 没有指定堆栈指针的初始值,因此它不会出现在 ELF 文件中。默认情况下,最常见的程序加载器 (Linux) 会随机化堆栈地址。


推荐阅读