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

问题描述

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

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

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

解决方法

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

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