0%

本次lab, shlab. 即编写一个简单的shell。

0. 背景知识·

shlab相对其它lab要简单一些,但是其中牵涉出来的一些概念是相当难的。简单说一下这次lab依赖的背景知识吧。

书籍对应 异常控制流 章节

  1. 理解进程的概念,linux如何创建新进程,进程的状态转换,回收等过程。
  2. 理解linux中的signal概念,掌握如何发送、接收、处理signal事件,理解signal handler中的 Async-Signal-Safety问题及解决方案(也是本次实验的难点) ,掌握async-signal-safety的guideline.
阅读全文 »

本次 lab, cachelab.

0. 说明·

从这个lab开始,终于开始编写一些高级语言的代码了,而不像之前要去分析汇编。但是这并不意味这题目就简单了,实际上,cachelab耗费了我2天多的时间。ok,言归正传,这个lab的目的是什么呢?

cachelab帮助我们理解计算机存储体系中的重要组成部分–cache。 理解cache是如何组织的,如何工作的,又是如何影响我们的程序的性能的。

阅读全文 »

今天继续学习csapp.

前一个lab: Csapp-Datalab 详解

本次lab, bomblab.

0. 说明·

这个实验相当好玩, 题如其名, 类似一个拆炸弹的过程. 实验只给了一个可执行文件, 需要学生通过gdb反汇编这个可执行文件, "拆弹"共有6个阶段, 每个阶段需要用户输入一个特定的字符串, 一旦输入错误, 炸弹就会爆炸,程序终止.

做完整个实验, 学生可以学会如何使用gdb, 能够看懂 gcc所编译出来的汇编代码. 掌握阅读汇编代码的能力.

gdb的使用可参考: gdb 调试基础

本次解释, 均已代码注释+图形解释.

所有汇编代码, 可通过 objdump -d bomb获得.

阅读全文 »

一直用惯了IDE集成的debug工具, 忽略了gdb这个命令行debug工具. 而最近在做csapp的bomblab, 就不得不来学习它了. 所以特此记录.

1. 基本使用·

考虑以下我们在IDE中要进行debug一般需要哪些功能?

  1. 设置断点(包含条件断点)
  2. 开启debug
  3. step in, step over, continue
  4. 观察某些值的变化, 打印数组value, 打印某个地址value
  5. 函数调用stack, 切换stack
  6. 临时更改某个变量,参数的值

下面讲解如何用gdb实现这些功能。

为了更方便讲解, 这里提前把所有常用命令贴出, 读者可不用一一记住, 在逐渐使用的过程中,自然就能形成记住了.

阅读全文 »

准备把csapp详细看一遍,所有lab都做一遍,加深理解。

本篇是datalab的个人解法,所以很可能不是最优解

原课程地址:http://www.cs.cmu.edu/afs/cs/academic/class/15213-f15/www/schedule.html

ok,现在就来一道道题说明。

0. 说明·

datalab着重于让学生理解 数字(integer,float point)在bit level上的表示与操作。通过限制学生的操作集(如仅能使用 ~, |, +等此操作),让学生在bit level上思考问题。

阅读全文 »

一般来说,安装任何linux发行版后,我们做的第一步就是更换它的仓库源,然后才能愉快的下载各种东西。

这里就说一下ubuntu的通用换源方法:

1
2
3
4
5
6
# 备份源source.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# sed批量替换源地址
sudo sed -i 's/^\(deb\|deb-src\) \([^ ]*\) \(.*\)/\1 http:\/\/mirrors.aliyun.com\/ubuntu \3/' /etc/apt/sources.list
# update 生效
sudo apt update

ok, 就这么简单。

jpackage是java 14里面自带的打包工具,jpackage解决了java开发过程中得一个难题:分发自己的程序,需要客户电脑中已安装jre环境。有了jpackage,我们可以直接将java程序打包成安装包,具体来说:

  • Windows:exe,msi
  • Mac:dmg,pkg
  • Linux:deb,rpm

jpackage目前并不成熟,但是也算是可以使用。另外,虽然jpackage可以打包各个系统的安装包,但是在一个系统上只能打对应系统的安装包。比如在windows上,就只能打成exe或msi。

阅读全文 »

由于hexo的渲染机制,本文代码有问题,所以选择隐藏。

作为一个半vimer:不想用纯vim+各种插件,但实现很喜欢vim的各种键位带来的便捷性。所以很久以前就是使用IDE+vim插件在使用。IDE当然是使用jetbrain家的了。今天就来介绍一下jb家可用的vim插件ideavim以及如何自定义配置ideavim。

hexo 显示尖括号有问题,导向github:

https://github.com/ravenxrz/ravenxrz.github.io/blob/master/source/_posts/ideavim%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E.md

阅读全文 »

2024-6-30 update: 实际上本文是linux process的内存布局,而不是c语言内存布局。

1. 前言·

老早就接触到了C语言中的内存布局,如代码段,数据段等等名词,也曾因为不了解C语言的内存分布机制而吃过亏。所以这里总结以下。现在让我们以两个问题来引入,先看下面这两段代码:

阅读全文 »