0%

今天继续学习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语言的内存分布机制而吃过亏。所以这里总结以下。现在让我们以两个问题来引入,先看下面这两段代码:

阅读全文 »

以下信息均为个人理解,如有错误,还请指正。

家里网络出了点问题,维修师傅上门修好后,看到我把路由器开了2个频段(2.4G和5G)对给我说,“没必要开5G,信号不好”,虽然我知道这个说法,但是我也听说5G下速度要快点的呀,于是就百度了一波。

先给结论·

  • 2.4G信号好,干扰强,可选信道窄,网速慢。
  • 5G 信号差,干扰弱,可选信道宽,网速快。
  • 正常情况下,无线模式都应该选择mixed模式。若确定自己的设备都支持n或ac等较新协议的,可使用only模式。
阅读全文 »

Linux文件系统基础知识·

Linux文件系统基础知识

本文整理自《鸟哥的Linux私房菜-基础学习篇》

我们都知道,在Linux下,文件除了文件本身的数据外,还有非常多的其他属性(如文件的权限,所属者,时间参数等等)。Linux文件系统是如何实现它们的呢?

阅读全文 »