0%

ucore lab1是一个从无到有的过程,涉及比较多的硬件细节,比如实模式到保护模式的转换,ELF格式的加载,中断处理等内容。根据原理课的内容,ucore lab1设计了一个BIOS,一个bootloader和一个OS来实现初步的操作系统功能。其中BIOS执行系统初始化软件完成基本IO初始化和引导加载功能,bootloader可以切换到X86保护模式,能够读磁盘并加载ELF执行文件格式,并显示字符,OS初步实现处理时钟中断和显示字符等简单功能。

阅读全文 »

我们一般打开电脑从启动电源开始,等待开机后再进行具体的操作,运行特定的程序。具体计算机是怎么加载程序并开始运行的呢?在操作系统内核运行之前需要先执行系统初始化软件,完成基本的I/O初始化和引导加载功能,为操作系统内核运行构建环境。之后,操作系统通过中断、异常、系统调用来响应用户的一系列操作。

阅读全文 »

常规的函数调用在调用时会有压栈的行为。假如我们想引导编译器将一段函数代码插入到调用者调用的位置处执行,而不是以默认压栈调用的方式,常规函数调用就无法满足我们的需求了,于是引入了内联函数。内联函数减少了函数的调用开销:如果多次被调用的某个函数实参相同,则其返回值必然是相同的,编译器可利用此特性对程序进行优化,而内联汇编相当于用汇编语句写成的内联函数,具有方便、快速的特点,在系统编程中广泛使用。

阅读全文 »

各种病毒扫描软件都会提示有安全漏洞,通过安全漏洞攻击者可以使攻击者能够在未授权的情况下访问或破坏系统。栈溢出攻击就是常见的攻击手段之一,通过向栈中写入过多的数据导致数据溢出来改变程序执行流程,从而达到攻击的效果。在attack lab中,我们将利用getbuf()函数不检查输入字符存储空间和栈分配空间检查的这一特性来对现有程序进行控制流劫持,执行非法程序代码。

阅读全文 »

计算机中的数以二进制的形式存储和运算,每个比特不是0就是1。计算机通过对比特进行不同方式的编码和描述,从而执行纷繁复杂的各种任务。我们有诸多基于底层的接口,所以一般不会直接接触到比特的运算。datalab直接与编码数字序列的0和1打交道,通过对整数和浮点数的位操作来实现一系列的操作。

阅读全文 »

真相只有一个!从扑朔迷离的线索里推理出真相总是那么刺激。我们将在bomblab体会如何根据星星点点的线索,胡乱假设合理推断,大胆验证,从而揭开真相神秘的面纱。bomblab的场景为拆炸弹,任何一个输入不正确均会引发炸弹爆炸。根据二进制文件反汇编形成的汇编代码来推断应该输入的字符串,解锁6个关卡和待解锁的神秘关卡。

阅读全文 »