我与北京与WOT 2016

从小到大,之前都没去过北京。一是对故宫长城并没有什么兴趣(毕竟只对吃感兴趣括弧笑),二是总觉得北京那算是大都市,自己还是太Low了。机缘巧合,得到了张WOT 2016的票,再三犹豫之后还是毅然决定踏上旅程。唉,还是准备不重复,当初还以为北京的火车票应该不是那么难买,结果就先买了去的车票,几天以后才买回程的票,结果因为买迟了,足足少在北京玩2个小时。     Continue Reading
Xin Qiu's avatar
Xin Qiu Apr 15, 2016

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

CSAPP Lab2 解题分析

Lab2 的 Bomb是个非常有意思的实验,比起之前耗脑的Lab1,这个Lab主要是学习反汇编。 这里我的环境是OS X EI Capitan,Lab2是[Updated 1/12/16]. Phase1在Mac上是默认没有GDB的,可以使用LLDB来代替。 进入lldb lldb bomb 使用disassemble进行反汇编,参考bomb.c文件,可以知道主要的几个函数名。 首先是Phase_1 (lldb) disas -n phase_1 得到以下汇编代码 bomb`phase_1: bomb[0x400ee0] <+0>: subq $0x8, %rsp bomb[0x400ee4] <+4>: movl $0x402400, %esi bomb[0x400ee9] <+9>: callq 0x401338 ; strings_not_equal bomb[0x400eee] <+14>: testl %eax, %eax bomb[0x400ef0] <+16>: je 0x400ef7 ; <+23> bomb[0x400ef2] <+18>: callq 0x40143a ; explode_bomb bomb[0x400ef7] <+23>: addq $0x8, %rsp bomb[0x400efb] <+27>: retq 这段代码还是挺好理解的,保存Stack pointer,将$0x402400传给%esi,调用位于0x401338的strings_not_equal函数,比较%eax是否为0,不为零则调用explode_bomb函数,为零则返回。 所以关键要找出字符串是什么。根据上述的汇编代码,可以发现字符串被保存在0x402400这个内存里,所以使用x/s来查看。 (lldb) x/s 0x402400 得到 0x00402400: "Border relations with Canada have never been better." 所以第一关的答案是Strings_Not_Equal     Continue Reading
Xin Qiu's avatar
Xin Qiu Feb 10, 2016

Flask补坑记录

前言不得不说,Flask是个不错的框架,它很简洁,然而却不失强大。在我阅读 << Flask Web Development >> 这本书的过程中,我觉得最好是这本书的配套源码和issues。在这些帮助下,一步步从完全不了解Flask到稍微知道Flask的工作原理。这过程中有好多次因为一些小细节的错误debug个很久。在此,我记录了一些我遇到的问题,方便大家看看。     Continue Reading
Xin Qiu's avatar
Xin Qiu Dec 21, 2015

云主机下的docker+Nginx搭建

之前申请到了腾讯云服务器,所以在上面折腾了一下 Nginx。 准备工作系统配置操作系统 Ubuntu Server 14.04.1 LTS 64位 CPU 1核 内存 1GB 系统盘 8GB(本地盘) 数据盘 0GB 公网带宽 1Mbps     Continue Reading
Xin Qiu's avatar
Xin Qiu Nov 13, 2015

Python科学计算学习

之前参加数学建模比赛都是用的 MatLab,然而电脑每次运行 MatLab 都烫的要命,所以决定用自己比较熟悉的 python 来进行科学计算。     Continue Reading
Xin Qiu's avatar
Xin Qiu Nov 07, 2015

读书笔记——CSAPP第二章

CSAPP(Computer Systems: A Programmer’s Perspective ),中文书名为深入理解计算机系统。这本书的好不需多言。为了锻炼英文阅读能力,我特地买的是英文原版。第一章比较简短,简单的从一段Hello World C程序,慢慢深入计算机底层的运行机制。可以说这一章就是本书的框架。以下是从第二章开始,记录了我遇到的困惑,一些简单的就不再介绍,书上已经写的很详细。     Continue Reading
Xin Qiu's avatar
Xin Qiu Sep 27, 2015

Me

    Continue Reading
Xin Qiu's avatar
Xin Qiu Sep 11, 2015