08 2021 档案
摘要:思考题的引入 首先看这样一道思考题: 如何用正则表达式识别所有是三的倍数的二进制串? 考虑最暴力的做法。用一个变量rem表示一个串的前缀作为二进制对3的余数,对新进来的字符讨论: 进来一个0,则rem=(rem<<1)%3;,因为我们是从高位向低位读的 进来一个1,则rem=((rem<<1)+1)
阅读全文
摘要:前话 开了SICP的坑,记一下lisp的方言scheme的一些东西 我的笔记本是manjaro,本来折腾了半天装不上mit-scheme,后面发现直接自带guile就蛮能用的(能用就行) 一个很重要的点就是求值的时候有两种规则:正则序和应用序,分别表示先替换后计算和先计算后替换。 一般的scheme
阅读全文
摘要:Soundness Conservative approximation: captures all program behaviors, or the analysis result models all possible executions of the program 然鹅 Academia
阅读全文
摘要:这一节主要讨论针对CFG中的路径的优化 Feasible & Realizable Paths Infeasible Paths: paths that do not correspond to actual executions Unrealizable Paths: paths whose "r
阅读全文
摘要:Datalog = Data + Logic,是声明式编程语言(Declarative Programming Language) Prolog的一个子集 Datalog最早作为数据库的查询语言出现,是非图灵完备的编程语言 语法 和数理逻辑的命题逻辑、谓词逻辑基本是一致的,如果看的教材和我一样是Ma
阅读全文
摘要:下面几节课都比较轻松,内容偏科普性质 Security Achieving some goals in the presence of adversaries 这个概括可以说是很简练了 统计意义下最常见的两类漏洞: Injection Errors Information leaks 这两者本质上都
阅读全文
摘要:CSA=Context Sensitive Analysis 上下文敏感分析 不敏感的分析认为所有语句的执行顺序无法区分,也就是没有上下文的概念 考虑如下代码片段 class A; A a = new A(); // o1 A b = new A(); // o2 A pa = func(a); A
阅读全文
摘要:PA=Pointer Analysis 指针分析 Motivation CHA方法实际上没有利用足够的信息(即实际上变量可能指向的对象所从属的类的范围可以进一步缩小),会引入假的调用边 Pointer Analysis PA是一种基础的静态分析,它要回答的问题是"某个指针p的值域可能是啥" 对于OO
阅读全文
摘要:CGC=Call Graph Construction Motivation 如果只做method内的分析,则任何包含function call的语句都需要保守分析(例如说默认不是常数) 这样是不利于进一步做优化的,因此引入Call Graph图对CFG作拓展 java call invokesta
阅读全文
摘要:大一下享受生活&课程存活经验 下一届的直系小朋友们终于来了,希望自己能够真正帮到他们,而不是向去年的我一样自己摸索(虽然也没有摸索地太痛苦,但是从反响来看大部分的同学的求索之路还是很痛苦的.... 混了一年也学会了各种划水摸鱼,算是成了老油条了。不过享受生活和学习不冲突,因此这次不完全是存活经验了(
阅读全文