基于CPS变换的尾递归转换算法

2017-02-26
阅读 9 分钟
7.7k
众所周知,递归函数容易爆栈,究其原因,便是函数调用前需要先将参数、运行状态压栈,而递归则会导致函数的多次无返回调用,参数、状态积压在栈上,最终耗尽栈空间。

Binary Bomb: 二进制炸弹

2017-02-15
阅读 19 分钟
18.6k
这是CSAPP官网上的著名实验,二进制炸弹,通过gdb和反汇编猜测程序意图,共有6关和一个隐藏关卡,只有输入正确的字符串才能过关,否则会程序会bomb终止运行,隐藏关卡需要输入特定字符串方会开启

Buffer Overflow: 堆栈溢出攻击实验

2017-02-15
阅读 4 分钟
6k
linux默认开启ASLR,每次加载程序,变量地址都会不一样,所以若要关闭ASLR:sysctl -w kernel.randomize_va_space=0(赋值为2,即可打开ASLR) 不过本实验的程序似乎经过特殊处理,不需要关闭ASLR 正常编译的程序的stack是non-executable的,但是加一个编译选项就可以打开本实验的程序应该都打开了executable选项了

C++源码调用图生成器实现

2017-02-10
阅读 3 分钟
6.3k
之前受知乎用户mailto1587启发,写了个C++源码的调用图生成器,可以以图示法显示C++函数的调用关系,代码放在了github仓库里,仅供参考:CodeSnippet/python/SRCGraphviz/c++ at master · Cheukyin/CodeSnippet · GitHub

用Org-Mode和Jekyll写博客

2017-02-10
阅读 5 分钟
6.9k
在这个月之前,我一直都是Vimmer,可是VimScript语法令人无语的混乱和棉花般的软弱无力,让我苦恼不已,可是工作学习却对其颇多依赖,始终舍之不得。 然而,就在上个月,我无意瞥了一眼我那肿胀庞杂臭长不堪的.vimrc,一眼…便失去了维护的信心,放弃Vim,自然只能转投Emacs。 经过一个月的反复折腾和深入研究后,我越加感受...

C宏系统缺陷

2017-02-10
阅读 3 分钟
3.1k
这两天稍稍看了一下boost的preprocessor库,这是一个用C宏写就的库,发觉boost那帮疯子竟然利用各种奇技淫巧定义出各种数据类型和结构,包括链表、栈、数组等等,还为它们设计了完整的ADT,还有各种各样函数式语言的常见方法,像for_each、filter、cons,fold_left、fold_right之类,估计这帮人把函数式语言的很多特性搬...

xv6中存储cpu和进程信息的技巧

2017-02-10
阅读 3 分钟
3.5k
xv6是一个支持多处理器的Unix-lik操作系统, 近日阅读源码时发现xv6在记录当前CPU和进程状态时非常tricky 首先,上代码: {代码...} 其中struct cpu是一个用来保存每个cpu运行状态的结构体, 代码第一行定义了结构体数组cpus[NCPU],NCPU对应cpu的总数(最大为8),也就是说cpus用来存储所有cpu的运行状态。 那么问题来...