本来不打算写的,但是属实是有点震惊到我了,jyy的课真不戳,一个十分钟能让我不断回退观看,我最大的感受就是,所有你学到的任何知识你都能通过programming来看到,比如我们可能都知道firmware将代码从磁盘上加载到0x7c00这个部分的代码,你如何从真实的环境看到这个过程,反正我是一点没有思路,但是jyy能让我豁然开朗。
首先前半段的基本知识就是cpu在开机reset时,状态是确定的,比如x86架构,pc会指向0xffff0,于是主板生产商就在0xffff0这里放置了一个固件代码,固件代码就类似于bios这种,他将程序员写的代码加载0x512的字节到0x7c00处,然后cpu执行这串代码,从而达到一些目的,比如启动操作系统等
理论是这样,实操起来,我们想调试这个过程该怎么做,首先jyy就告诉我们用qemu,qemu的两个选项-s和-S,这里具体见讲义3. 硬件视角的操作系统 (jyywiki.cn)
用gdb调试,下断点,加载symbol文件,这些都很常规
之后jyy提出了一个trick,我们是否需要在每次调试完后都需要按那些命令再调试,不需要!这个过程可以自动化,我作为一个pwn手,对于gdb的使用不可谓不多,很多时候我都需要用手来敲命令,敲很多次si来达到我想要的地方来调试,我竟然从没想过自动化这个过程,之后他又说了watch的好处,通过监视0x7c00这个位置来再固件中停下,正好停到加载程序的位置,哇,真妙!
之后有一个hack小故事,有一个黑客通过溢出来溢出掉firmware的代码,hhhh!天才啊哈哈哈
之后老师引入了am来编译出可以再bare machine上运行的二进制,我终于知道am项目的作用了,我之后还会再认真看看am的makefile
之后复习或者学习不要看我这篇博客,看上面给的那个链接就好,这个只是我一个抒发内心的地方