stack - 在 x86-64 上启用长模式和分页后,堆栈指针是否包含虚拟地址或物理地址
问题描述
我正在从头开始编写一个最小的操作系统。我启用了分页和长模式,但是当我想设置堆栈时,我有几个问题。
堆栈指针是否包含在使用 PUSH、POP 指令时由 MMU 自动转换为物理地址的虚拟地址?
堆栈的位置是否在 ELF 文件中提及?
解决方案
启用分页后,堆栈指针必须是虚拟地址。
标准的 x86-64 psABI 没有指定堆栈指针的初始值,因此它不会出现在 ELF 文件中。默认情况下,最常见的程序加载器 (Linux) 会随机化堆栈地址。
推荐阅读
- perl - Perl 新手初体验 Unicode(在文件名、-e 运算符、打开运算符和 cmd 窗口中)
- java - Gradle Plugin 如何将方法添加到特定块?
- reactjs - React - 更新嵌套状态(类组件)
- excel - 如果是,则查找某些文本..复制同一行的单元格值
- python - 关于使用 jupyter notebook 的 python 中的关键错误
- extjs - Extjs Panel 渲染两次?
- jquery - 未从控制器中的 ajax 调用获取数据----所需的数据参数“数据”不存在
- python - Python av在无限循环中播放文件
- java - 仅当前一个抛出异常时才执行可完成的期货列表
- java - Spring boot JPQL 对位运算符的支持