CSAPP Lab3 解题分析

首先,使用tar xvf命令解压文件后,会有3个可执行的二进制文件bufbomb,hex2raw,makecookie。参考write-up。 Level 0Bufbomb程序运行会读一个字符串,使用一下函数getbuf: /* Buffer size for getbuf */ #define NORMAL_BUFFER_SIZE 32 int getbuf() { char buf[NORMAL_BUFFER_SIZE]; Gets(buf); return 1; } Gets函数和标准库的gets功能比较相似,是读取字符串。因为Gets没有办法判断是否buf足够大,所以要用一个函数去判断长度是否小于32。将字符串传入getbuf函数中,若字符串小于32,则返回1. 080491f4 <getbuf>: 80491f4: 55 push %ebp 80491f5: 89 e5 mov %esp,%ebp 80491f7: 83 ec 38 sub $0x38,%esp 80491fa: 8d 45 d8 lea -0x28(%ebp),%eax 80491fd: 89 04 24 mov %eax,(%esp) 8049200: e8 f5 fa ff ff call 8048cfa <Gets> 8049205: b8 01 00 00 00 mov $0x1,%eax 804920a: c9 leave 804920b: c3 ret getbuf是由函数test调用: void test() { int val; /* Put canary on stack to detect possiblecorruption */ volatile int local = uniqueval(); val = getbuf(); /* Check for corruption stack */ if (local != uniqueval()) { printf("Sabotaged!: the stack has beencorrupted\n"); } else if (val == cookie) { printf("Boom!: getbuf returned0x%x\n", val); validate(3); } else { printf("Dud: getbuf returned0x%x\n", val); } } 其中,Smoke源码: void smoke(){ puts("Smoke!: You calledsmoke()"); validate(0); exit(0); } level 0 的任务是让getbuf在执行后返回时,执行smoke函数,而不是返回test函数中。     Continue Reading
Xin Qiu's avatar
Xin Qiu Mar 30, 2016

清华操作系统课程学习

因为学习操作系统,因为还有一些其他事情要做,所以没有直接上MIT 6.828,选择了清华的操作系统课和配套的ucore。     Continue Reading
Xin Qiu's avatar
Xin Qiu Mar 17, 2016

基于CSI的移动目标侦测研究学习

最近被老师带着搞科研,研究CSI(channel state information)。 环境安装需要用到CSI tool,这是一个运行在Ubuntu上的利用Intel Wi-Fi Wireless Link 5300 802.11n来做分析的程序。这里可以使用作者网站中方法来安装,也可以下载清华的版本。清华的版本附带了安装说明书,参考说明书上的方法,安装即可。 需要注意的是,发射源路由器需要选择单天线支持802.11n的路由器,我使用的是TP-LINK TL-WR742N。 获取数据cd进入csitools文件夹,进入linux-80211n-csitool-supplementary/netlink,运行 sudo ./log_to_file tmp.dat 打开另一个终端,运行 ping 192.168.1.1 -i 0.2 netlink文件夹中的tmp.dat就是采集的原始数据。 读取数据使用Matlab读取数据,进入linux-80211n-csitool-supplementary/matlab文件夹,使用read_bf_file函数可以读取数据。 一个例子数据包里包含 timestamp_low: 4 (In the sample trace, timestamp_low is invalid and always 4.) bfee_count: 72 Nrx: 3 Ntx: 1 rssi_a: 33 rssi_b: 37 rssi_c: 41 noise: -127 agc: 38 perm: [3 2 1] rate: 256 csi: [1x3x30 double] 其中: timestamp_low 是时间戳 bfee_count 数据包数量 Nrx,Ntx 分别表示接收端和发送端的天线数量 rssi_a, rssi_b, rssi_c 每个天线的RSSI数据,单位dB, agc Automatic Gain Control perm NIC重排列后的顺序结果,代表RF链路的顺序 rate 发送包的rate csi CSI原始数据,是个Ntx×Nrx×30复数矩阵 主要提取出CSI数据和timestamp_low。     Continue Reading
Xin Qiu's avatar
Xin Qiu Mar 12, 2016