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

Does the stack pointer contain a virtual address or a physical address once long mode and paging is enabled on x86-64

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

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

  2. ELF文件中是否提到栈的位置?

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

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