SPA Knowledge Base issues
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues
2021-12-24T20:48:09+08:00
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/47
污点分析的rules里面,m需要先dispatch后再使用吗
2021-12-24T20:48:09+08:00
Ricolove
污点分析的rules里面,m需要先dispatch后再使用吗
我想直接resolve方法签名,可以吗
我想直接resolve方法签名,可以吗
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/46
taintTransfer四元组的u为什么不是多余的呢
2021-12-22T11:56:22+08:00
Ricolove
taintTransfer四元组的u为什么不是多余的呢
【路人】DZ21330015 李煦阳<ccyy407@qq.com> 2021/12/13 22:16:33
求助,taintTransfer四元组的u为什么不是多余的呢,m和to应该可以唯一确定u呀
![AP1_D__FS71Z4CI_ESW9HRC](/uploads/4f7b88d08e8dbbbb13441d0402b41f84/AP1_D__FS71Z4CI_ESW9HRC.png)
m应该是dispatch过的呀
【路人】DZ21330015 李煦阳<ccyy407@qq.com> 2021/12/13 22:16:33
求助,taintTransfer四元组的u为什么不是多余的呢,m和to应该可以唯一确定u呀
![AP1_D__FS71Z4CI_ESW9HRC](/uploads/4f7b88d08e8dbbbb13441d0402b41f84/AP1_D__FS71Z4CI_ESW9HRC.png)
m应该是dispatch过的呀
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/45
a[3] = 1; a[4] = 2; 那么这个时候 a[NAC] 应该等于什么
2021-12-11T21:44:24+08:00
Ricolove
a[3] = 1; a[4] = 2; 那么这个时候 a[NAC] 应该等于什么
【管理员】助教-陈钦霖(742722969) 20:50:31
nac
【管理员】助教-陈钦霖(742722969) 20:50:31
nac
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/44
不要求跟踪ArrayLengthExp吧
2021-12-11T21:44:06+08:00
Ricolove
不要求跟踪ArrayLengthExp吧
【群主】谭添(236069938) 2021/12/11 12:28:57
arraylength是一元运算符,返回值当成NAC
【群主】谭添(236069938) 2021/12/11 12:28:57
arraylength是一元运算符,返回值当成NAC
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/43
y = T.f 怎么拿到所有相关语句
2021-12-11T21:43:34+08:00
Ricolove
y = T.f 怎么拿到所有相关语句
【管理员】助教-陈钦霖(742722969) 2021/12/10 23:31:20
初始化的时候自己存一下呗
【管理员】助教-陈钦霖(742722969) 2021/12/10 23:31:20
初始化的时候自己存一下呗
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/42
什么时候需要考虑 context?
2021-12-11T21:42:17+08:00
Ricolove
什么时候需要考虑 context?
不需要考虑context。context 只是为了提高分析精度,常量传播用不到。如果没有 context,那么可能会出现假 alias。
不需要考虑context。context 只是为了提高分析精度,常量传播用不到。如果没有 context,那么可能会出现假 alias。
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/41
能从InterSolver调InterConstantPropagation中的新方法吗
2021-12-08T22:58:45+08:00
Ricolove
能从InterSolver调InterConstantPropagation中的新方法吗
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/40
有没有什么办法把staticFieldAccess塞进Fact里
2021-12-08T22:57:48+08:00
Ricolove
有没有什么办法把staticFieldAccess塞进Fact里
【路人】MF21330012 陈振宇(895761580) 2021/12/7 11:51:45
求问一个很基础的问题,有没有什么办法把staticFieldAccess塞进Fact里
还是说根本塞不进去,必须得开一个新的field放staticField的信息
【路人】MF21330012 陈振宇(895761580) 2021/12/7 11:51:45
求问一个很基础的问题,有没有什么办法把staticFieldAccess塞进Fact里
还是说根本塞不进去,必须得开一个新的field放staticField的信息
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/39
一个顺序问题相关的疑问,一个静态复制可能不会立刻引起别名分析变化
2021-12-08T22:56:57+08:00
Ricolove
一个顺序问题相关的疑问,一个静态复制可能不会立刻引起别名分析变化
【路人】181240020 胡俊豪<181240020@smail.nju.edu.cn> 2021/12/5 21:34:24
我有一个顺序问题相关的疑问。比如a=T.f这句话。如果其他很远的地方形如T.f=的static Store语句更新了,按理说下一个该更新的就是这个a=T.f。但是由于a=T.f与T.f=没有edge(离得很远,甚至在不同的方法里),那按照worklist算法,T.f=更新后,可能不会引起a=T.f更新。
A7这个地方的flow insen...
【路人】181240020 胡俊豪<181240020@smail.nju.edu.cn> 2021/12/5 21:34:24
我有一个顺序问题相关的疑问。比如a=T.f这句话。如果其他很远的地方形如T.f=的static Store语句更新了,按理说下一个该更新的就是这个a=T.f。但是由于a=T.f与T.f=没有edge(离得很远,甚至在不同的方法里),那按照worklist算法,T.f=更新后,可能不会引起a=T.f更新。
A7这个地方的flow insensitive可能会引起这样的问题?所以需要多次启动worklist?
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/38
依赖分析的顺序可能会出现错误的结果,这是为什么
2021-12-08T22:50:42+08:00
Ricolove
依赖分析的顺序可能会出现错误的结果,这是为什么
【路人】201870048 张乃仁(793125457) 2021/12/5 20:40:26
我写的A7似乎有点问题:对于 Interprocedural 的 testcase,依赖分析的顺序(也就是语句被加进 WorkList 的顺序)可能会出现错误的结果。然后
![X8557U__VUBRFV_HE_X9_FX](/uploads/b6b5d29f8e53559606ce59b8335e78a5/X8557U__VUBRFV_HE_X9_FX.png)
这样...
【路人】201870048 张乃仁(793125457) 2021/12/5 20:40:26
我写的A7似乎有点问题:对于 Interprocedural 的 testcase,依赖分析的顺序(也就是语句被加进 WorkList 的顺序)可能会出现错误的结果。然后
![X8557U__VUBRFV_HE_X9_FX](/uploads/b6b5d29f8e53559606ce59b8335e78a5/X8557U__VUBRFV_HE_X9_FX.png)
这样多加几遍好像就没问题了,这种处理合法吗((
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/37
ConstantPropagation.java 的提交?
2021-12-08T22:48:46+08:00
Ricolove
ConstantPropagation.java 的提交?
【路人】MG21330034 林昊(1184264181) 2021/12/1 14:48:25
想问下作业7这里的意思是不是评测用的ConstantPropagation.java只包含了作业4的功能呢?也就是说如果要增加这次作业的代码到ConstantPropagation.java的话一定要提交自己的版本?
【路人】MG21330034 林昊(1184264181) 2021/12/1 14:48:25
想问下作业7这里的意思是不是评测用的ConstantPropagation.java只包含了作业4的功能呢?也就是说如果要增加这次作业的代码到ConstantPropagation.java的话一定要提交自己的版本?
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/36
关于数组下标使用数组元素来指定
2021-12-08T22:45:53+08:00
Ricolove
关于数组下标使用数组元素来指定
【路人】DZ21330015 李煦阳<ccyy407@qq.com> 2021/11/28 21:42:23
还没有做作业,不过想问,对于a=b; a[0] = 0; b[a[0]] = a[0]; 是有可能解出来 a[0] = b[0] = 0的吗?... 感觉flow-sensitive和insensitive想要很好结合的话,有一些微妙的地方...
【路人】DZ21330015 李煦阳<ccyy407@qq.com> 2021/11/28 21:42:23
还没有做作业,不过想问,对于a=b; a[0] = 0; b[a[0]] = a[0]; 是有可能解出来 a[0] = b[0] = 0的吗?... 感觉flow-sensitive和insensitive想要很好结合的话,有一些微妙的地方...
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/34
探讨: CHA的复杂度与实现优化
2021-11-10T11:56:20+08:00
yanghaku
探讨: CHA的复杂度与实现优化
1. CHA的dispatch的时候,是沿着继承树找父类的, 最坏情况就是找到root类(java.lang.Object)才有method实现,复杂度是$`O(h)`$, h为开始dispatch的深度.
2. virtual call的处理, 需要遍历所有的子类(子接口), 并且每个都需要dispatch沿着路径回父节点找method实现.
那么最坏情况下: 继承图退化成一个链,method只有root类实现了, 这个复杂度就是$`1+2+3+...+(n-1)\...
1. CHA的dispatch的时候,是沿着继承树找父类的, 最坏情况就是找到root类(java.lang.Object)才有method实现,复杂度是$`O(h)`$, h为开始dispatch的深度.
2. virtual call的处理, 需要遍历所有的子类(子接口), 并且每个都需要dispatch沿着路径回父节点找method实现.
那么最坏情况下: 继承图退化成一个链,method只有root类实现了, 这个复杂度就是$`1+2+3+...+(n-1)\ =\ O(n^2)`$ (n为总节点个数).
考虑到CHA的本质是callsite的类C有可能指向其所有的子类实例, 所以子类所有的method实现都有可能. 那么就可以在BFS/DFS遍历的时候, 遇到实现的method(非abstract)就加到resolve的method集合里面即可, 避免所有的节点都调用dispatch. 这样复杂度就是$`O(n)`$, 每个节点只需要访问一次.
因此我的实现是, virtual call的时候, 令callsite声明的类为C, resolve(cs) = BFS(C的后继)找到的所有的非abstract的method + dispatch(C).
(dispatch C 可能不存在,因为C可能是接口或者抽象类).
当前是过了作业给的样例, 并且自己造的几个也过了. 但是我不确定这样考虑是否全面(**会不会漏掉或者多找了method?**).
感兴趣的同学可以在这个Issue讨论一下下
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/33
怎么获得 CallKind
2021-10-30T10:28:28+08:00
Ricolove
怎么获得 CallKind
![image](/uploads/140433964a361583acb2a036a97a576c/image.png)
![image](/uploads/140433964a361583acb2a036a97a576c/image.png)
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/32
returnEdge有多个returnVar怎么处理
2021-10-29T23:12:27+08:00
Ricolove
returnEdge有多个returnVar怎么处理
【路人】MF21330012 陈振宇(895761580) 2021/10/29 18:37:46
求问一下returnEdge有多个returnVar怎么处理啊
之前的想法是从里面挑一个为常数的 错了
【路人】MF21330012 陈振宇(895761580) 2021/10/29 18:37:46
求问一下returnEdge有多个returnVar怎么处理啊
之前的想法是从里面挑一个为常数的 错了
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/31
为啥icfg会有多个入口点呀
2021-10-29T23:11:02+08:00
Ricolove
为啥icfg会有多个入口点呀
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/30
为啥要分callNode和noncallnode啊 我写的这俩逻辑一样
2021-10-29T23:09:58+08:00
Ricolove
为啥要分callNode和noncallnode啊 我写的这俩逻辑一样
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/29
递归遍历子接口和子类有什么简洁的写法吗
2021-10-29T23:09:26+08:00
Ricolove
递归遍历子接口和子类有什么简洁的写法吗
【路人】191830204 张侃(1550792743) 2021/10/29 15:27:02
递归遍历子接口和子类有什么简洁的写法吗
【路人】191830204 张侃(1550792743) 2021/10/29 15:27:11
写一堆好乱
【路人】191830204 张侃(1550792743) 2021/10/29 15:27:02
递归遍历子接口和子类有什么简洁的写法吗
【路人】191830204 张侃(1550792743) 2021/10/29 15:27:11
写一堆好乱
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/28
resolve 里 m 是函数签名,T = {m} 的时候怎么构造出 m 对应的方法
2021-10-29T23:09:07+08:00
Ricolove
resolve 里 m 是函数签名,T = {m} 的时候怎么构造出 m 对应的方法
![image](/uploads/c1b61274d2a6339e12598550231fb8de/image.png)
![image](/uploads/c1b61274d2a6339e12598550231fb8de/image.png)
https://git.nju.edu.cn/Ricolove/spa-knowledge-base/-/issues/27
实现了接口的类还有子类的话,接口调用应该能调到这个子类吧?
2021-10-29T23:06:47+08:00
Ricolove
实现了接口的类还有子类的话,接口调用应该能调到这个子类吧?