Step to UEFI (128)汇编到机器码的转换

在很长一段时间里面因为有编译器的帮助,完全没有手工进行汇编语言和机器语言转化的需求。不过前面碰到了RDRAND 这样的指令,一方面说明CPU指令还在增长,另一方面也发觉还有这样的要求,于是进行一些探究。
从资料上看,目前还活着的汇编工具有 NASM。先查阅一下支持的指令【参考1】,确定支持了 RDR[......]

阅读全文

Step to UEFI (125)CPUBreakPoint 研究

最近在研究 Intel ITP,这是可以进行源码级别调试的硬件工具。刚使用就遇到一个有意思的问题:如何让代码在需要的时候停下来。最直接的想法就是编写死循环,但是很快发现因为编译器的优化,当它发现你编写的代码是死循环,那么它会自动优化掉后面的它认为跑不到的代码。因此需要另辟蹊径找到更标准的方法。
找[......]

阅读全文

Step to UEFI (124) Ready_To_Boot Event

很早之前的代码,如果想完成在引导之前的一些工作,需要在Log中查找确定跳入引导代码之前的代码。直观,但是没有规范,同一个项目很容易出现好多代码都塞到同一处的情况。到了 UEFI ,规范中给出了一个规范的做法:使用 ReadyToBoot Event。对于这个,在《UEFI 原理与编程》第6章 事件有[......]

阅读全文

Step to UEFI (123)NOOPT 编译问题

之前我们在介绍 Source Level Debug 的文章中使用过 Noopt 的选项。后来找人请教了一下这个编译目标的含义:关闭一切编译优化。我猜测这样做的目的是为了让编译结果很容易实现汇编和 Source Code的一一对应。但是,很多情况下,编写EDK2代码的人都会忘记测试这个选项,于是,[......]

阅读全文