RCTF2021-musl-WP && 5space 2021 *CTF 2022 强网杯 2022 Musl 赛题 exp
写在一年后
在现在向前看,发现自己也算半个 musl 大师了,自从 RCTF2021 的 musl 题之后的每场比赛只要出现 musl 我都能解出,也从最开始的写一天到现在的两三个小时打通,有时候还能拿个N血。这是什么原因呢?很简单,每道题都是换汤不换药,都是同样的攻击点,也就是 dequeue 操作,堆风水上稍稍有些区别,但也差不多,然后再开个 seccomp 恶心选手。很没有意思啦。还是希望 CTF 比赛不要盲目追求难度(特指的是各种严苛的而又重复的堆利用)能少出现一些重复的套路题,多一些有意思的题目。
…COOL 语义分析器实现
COOL 的语义分析主要对作用域和类型做了检测,这是两个必要的检测。未定义或重复定义的变量会对代码生成造成影响;类型不匹配也会造成各种未定义行为。
作用域
语义分析中需要对每个标识符(变量、函数)做检测,主要需要检查是否有未定义的标识符和重复定义的标识符。以 COOL 为例,通过维护一个符号表即可实现检测。这个检测过程可能需要对 AST 进行多次遍历,因为在 COOL 中,全局变量可以在声明前引用,所以至少需要先遍历一次并记录所有的全局变量,这样在第二次遍历时就可以正确判断变量是否有定义。
…
语法分析简单总结
语法分析是词法分析的后一步,主要的目的就是通过词法分析器生成的 tokens 来生成抽象语法树(Abstract Syntax Tree,AST)。主要通过上下文无关文法(Context Free Grammar,CFG)来描述语言的语法,使用相应的算法更具 CFG 来解析 tokens 形成 AST。语法分析应该是编译原理中非常偏向数学的一个方面,并且已经有了很成熟的解决方案,这句话的意思就是语法分析和我学习的方向和目的关系不大。不过这个东西感觉还挺有意思,同时虽然关系不大,但是了解一下还是有必要的,这里简单总结一下,对于算法方面不准备详细写,之后有时间再补上吧(之后学校的编译原理课应该会在 LL,LR 这种地方花很多时间,到时候再来弄也无妨,现在就不浪费生命了)。在慕中语法分析占据了比较大的篇幅,我不觉得自己都听懂了,也有很多不记得了,所以下面写的东西里面可能有很多谬误,仅供参考了哈哈哈。
…