Lab Tools



写在前面

操作系统小学期选择了做mit6.828的lab,非常具有挑战性!希望可以记录下学习的内容和自己努力进步的点滴~


GDB

  • linux 程序调试工具

  • gdb的目的主要是让你知道程序内部正在运行什么代码,或者是当程序崩溃的时候正在执行什么代码

  • GDB主要可以做四种事情来帮助你找到bug:

    • 启动你的程序,指定任意可以影响程序行为的参数。
    • 让你的程序在指定的条件停住
    • 测试你的程序停止的时候发生了什么
    • 改变程序内部的变量,来改正程序的错误继续执行
ctrl + C,终止运行
c , 继续运行
si (or stepi), 执行一条机器指令
b function or b file:line or b *addr 设置断点
info break 查看断点的信息
delete 断点号 ,删除第n 个断点
n 单步执行,不进入函数
step 单步调试,进入函数
bt 显示当前程序的函数调用堆栈
info registers 查看寄存器的内容
x/Nx addr 二进制显示addr地址向下的n 个字 的内容
x/Ni addr 汇编形式显示addr地址向下的n 条指令
x/Ni $eip 显示当前指令下的 n 条指令
symbol-file file
thread n 运行指定线程
info thread 查看线程信息

GNU

https://www.zhihu.com/question/319783573/answer/656033035

GPL (通用公共许可证)

  • GPL,是GNU General Public License的缩写,是GNU通用公共授权非正式的中文翻译。
  • 大多数软件许可证决意剥夺你共享和修改软件的自由。相比之下,GNU通用公共许可证试图保证你共享和修改软件的自由。

QEMU

  • QEMU是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。

  • QEMU有两种主要运作模式:

    • User mode模拟模式,亦即是用户模式。QEMU能启动那些为不同中央处理器编译的Linux程序。而Wine及Dosemu是其主要目标。

    • System mode模拟模式,亦即是系统模式。QEMU能模拟整个电脑系统,包括中央处理器及其他周边设备。它使得为跨平台编写的程序进行测试及除错工作变得容易。其亦能用来在一部主机上虚拟数部不同虚拟电脑。

  • 软件优点

ELF 可执行文件的格式

最详细解析:

https://luomuxiaoxiao.com/?p=139

  • Executable and Linkable Format

  • ELF文件的加载过程(load_elf_binary函数详解)

    https://blog.csdn.net/gatieme/article/details/51628257

    从编译/链接和运行的角度看,应用程序和库程序的连接有两种方式。

    一种是固定的、静态的连接,另一种是动态链接;

    这样,就有了两种不同的ELF格式映像。

    • 一种是静态链接的,在装入/启动其运行时无需装入函数库映像、也无需进行动态连接。
    • 另一种是动态连接,需要在装入/启动其运行时同时装入函数库映像并进行动态链接。
  • ELF文件内容

https://blog.csdn.net/gatieme/article/details/51615799

Verbose mode

https://www.computerhope.com/jargon/v/verbose-mode.htm

  • A verbose mode is an option available in many computer operating systems, including Microsoft Windows, macOS, and Linux. It provides additional details as to what the computer is doing and what drivers and software it is loading during startup. This level of detail can be very helpful for troubleshooting problems with hardware or software, if errors are occurring during startup or after the operating system has loaded. Below is an example of verbose output in a Windows command line screen.

  • There are several ways to enable Verbose Mode. During startup, the screen may display which key(s) to press on the keyboard to enable Verbose Mode. Usually, users would press the Esc (escape) key for Linux, Ctrl+V keys for Microsoft Windows, and Command-V keys for macOS.

Makefile

  • 一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令。

  • 所要完成的Makefile 文件描述了整个工程的编译、连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建哪些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。尽管看起来可能是很复杂的事情,但是为工程编写Makefile 的好处是能够使用一行命令来完成“自动化编译”,一旦提供一个(通常对于一个工程来说会是多个)正确的 Makefile。编译整个工程你所要做的事就是在shell 提示符下输入make命令。整个工程完全自动编译,极大提高了效率。

  • make是一个命令工具,它解释Makefile 中的指令。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样。而且在Makefile 中可以使用系统shell所提供的任何命令来完成想要的工作。Makefile在绝大多数的IDE 开发环境中都在使用,已经成为一种工程的编译方法。

mit-6.828 Lab Tools的更多相关文章

  1. 《MIT 6.828 Lab 1 Exercise 12》实验报告

    本实验的网站链接:MIT 6.828 Lab 1 Exercise 12. 题目 Exercise 12. Modify your stack backtrace function to displa ...

  2. 《MIT 6.828 Lab 1 Exercise 11》实验报告

    本实验的网站链接:MIT 6.828 Lab 1 Exercise 11. 题目 The above exercise should give you the information you need ...

  3. 《MIT 6.828 Lab 1 Exercise 10》实验报告

    本实验的网站链接:MIT 6.828 Lab 1 Exercise 10. 题目 Exercise 10. To become familiar with the C calling conventi ...

  4. 《MIT 6.828 Lab 1 Exercise 8》实验报告

    本实验的网站链接:MIT 6.828 Lab 1 Exercise 8. 题目 Exercise 8. Read through kern/printf.c, lib/printfmt.c, and ...

  5. 《MIT 6.828 Lab 1 Exercise 3》实验报告

    本实验的网站链接:mit 6.828 lab1 Exercise 3. 题目 Exercise 3. Take a look at the lab tools guide, especially th ...

  6. 《MIT 6.828 Lab 1 Exercise 7》实验报告

    本实验链接:mit 6.828 lab1 Exercise 7. 题目 Exercise 7. Use QEMU and GDB to trace into the JOS kernel and st ...

  7. 《MIT 6.828 Lab 1 Exercise 4》实验报告

    本实验链接:mit 6.828 lab1 Exercise 4. 题目 Exercise 4. Read about programming with pointers in C. The best ...

  8. 《MIT 6.828 Lab 1 Exercise 2》实验报告

    本实验链接:mit 6.828 lab1 Exercise2. 题目 Exercise 2. Use GDB's si (Step Instruction) command to trace into ...

  9. MIT 6.828 Lab 1/ Part 2

    Exercise 03 - obj/boot/boot.asm 反汇编文件 截取asm部分文件并注释理解 # Set up the important data segment registers ( ...

随机推荐

  1. YAML & JSON &XML如何选择

    前言 本文翻译https://www.csestack.org/yaml-vs-json-vs-xml-difference/,下文会针对当前现有的数据序列化语言做下梳理.重点突出YAML是什么,优缺 ...

  2. salesman,动态规划带一点点贪心。

    题目直接链接 分析一下: 这题题意还是比较明白的(少见的一道中文题),他的意思就是:有这么一个无向图:保证联通且点与点直接有唯一的简单路径(说白了就是棵树,根节点是1),每个节点有一个权值(有正有负) ...

  3. redis zset底层实现原理

    一.Zset编码的选择 1.有序集合对象的编码可以是ziplist或者skiplist.同时满足以下条件时使用ziplist编码: 元素数量小于128个 所有member的长度都小于64字节 其他: ...

  4. centos7篇---开启防火墙和特定端口

    开启防火墙服务 以前为了方便,把防火墙都关闭了,因为现在项目都比较重要,害怕受到攻击,所以为了安全性,现在需要将防火墙开启,接下来介绍一下步骤.1, 首先查看防火墙状态: firewall-cmd - ...

  5. python 并发 ThreadPoolExecutor

    正文:Executor是一个抽象类,子类: ThreadPoolExecutor和ProcessPoolExecutor ,一个线程池,一个进程池. future对象:在未来的某一时刻完成操作的对象. ...

  6. SpringBoot2 整合JTA组件,多数据源事务管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.JTA组件简介 1.JTA基本概念 JTA即Java-Transaction-API,JTA允许应用程序执行分布式事务处理,即在两个或多个 ...

  7. combogrid设置多选,并获取多选的值

    1.combogrid设置多选 1.添加该属性 multiple: true, 2.添加该列 {field:'ck',checkbox:true}, 2.获取多选的值 var arr = $(&quo ...

  8. oracle创建Javasource实现数据库备份

    因客户需求,需要在业务系统中,菜单中的网页中的按钮中加入一个按钮,用于点击备份数据库 (环境:只配置了数据源连接oralce ,应用服务器和数据服务器不在一台机器,且数据库机器oracle操作系统账号 ...

  9. Redis之对象

    1.对象的类型与编码 Redis使用对象来表示数据库中的键和值,每次我们在Redis的数据库中新创建一个键值对,我们至少会创建两个对象,一个键对象,另一个值对象. 每个对象都由一个redisObjec ...

  10. Go Pentester - TCP Scanner

    Simple Port Scanner with Golang Use Go‘s net package: net.Dial(network, address string) package main ...