【问题标题】:How can i compute the lowest and highest possible mem addresses available from a kernel just after booting?如何在启动后计算内核可用的最低和最高内存地址?
【发布时间】:2014-12-19 16:57:59
【问题描述】:

在实模式启动后,我想找出最低和最高 我可以使用的可能的内存地址。我想我需要找出 然后计算安装在机器上的 ram 的实际大小 地址应该很简单(但只是为了好玩,我该怎么做:))。 然后我可以将这些地址用作 我的 gdt 的基础和限制对吗?这样加载gdt后, 进入保护模式,并设置我的段。我会拥有所有的记忆 可以玩。

【问题讨论】:

标签: memory assembly kernel ram


【解决方案1】:

根据定义,实模式不能寻址所有内存。您必须首先切换到保护模式,使用安全的 GDT 限制,扫描内存,然后相应地调整描述符限制。

至于检测内存,只需尝试从增加的物理地址读取,直到出现异常。为此指定一个选择器,在循环中重置描述符,然后继续。

【讨论】:

  • 你不会碰巧知道如何判断特定异常何时发生,以及如何处理它吗?
  • 何时 - 当您从不可用的物理地址读取数据时。如何处理它 - 得出没有更多内存的结论并停止循环:) 不确定它会是哪个异常。到处逛逛。
  • @SevaAlekseyev:当您阅读“不可用的物理地址”时,您会得到什么样的“异常”? (参考?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
相关资源
最近更新 更多