全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)
其实很多尝试我之前自己都做过了,这里就可以直接跳过或者简单提一下。
这个环境的搭建已经完成了,而且早就做了很多尝试了。之前的笔记中记录也算是完整,暂且看后面的信息了。
这个操作我按照上面的模式来查了一下,找到的是相同的地址。
这个是我这边测试出来的结果。
刚刚启动的时候,各个寄存器的状态如上。从上面看,基本上没有什么操作痕迹。
结合之前的信息,这部分数值其实是低区存储的内存值。
按照前面查出来的OS入口地址打断点,之后查看寄存器的信息如上。这个时候,堆栈esp寄存器已经有了相应的设置。说明堆栈的功能已经开始被处理,但是ebp还是0。
此时的堆栈空间中已经存放了一些数据。此时,还是16bit的寻址模式。此时这里其实还没有用到堆栈,里面的内容全是程序数据。
当运行到了这里,从堆栈的ebp以及esp来看,堆栈已经生效了。
以上是让软件停在bootmain的地方,看一下相应的系统状态。
此时的堆栈还是没有实际工作的,考虑向下增长的特性,ebp不应该为0,因此应该是没有实际工作。
运行两条指令之后,看得出来ebp指向了esp。
这里正好追踪到了一次函数调用,能够看到部分堆栈信息处理的过程。
这里到了函数调用后面,堆栈已经处理完了,因此单纯的软件操作暂时没有改掉堆栈存储的信息。这里应该也是由于这一部分的指令运行刚好没有局部量的操作,不然我们应该也能够看到一些堆栈信息的变化。
这部分信息的查看比较底层,我个人觉得的确也是有一些无趣的,而且特别费脑筋,有种看不进去的感觉。或许,等后面了解一个框架之后再回来,能够看的更加从容一些。