Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请求增强Godel示例代码的解读材料与教学指引 #96

Open
liyuyun-lyy opened this issue Feb 14, 2025 · 2 comments
Open

请求增强Godel示例代码的解读材料与教学指引 #96

liyuyun-lyy opened this issue Feb 14, 2025 · 2 comments
Assignees

Comments

@liyuyun-lyy
Copy link

liyuyun-lyy commented Feb 14, 2025

问题描述
当前在理解CallChain.gdl示例时存在以下困惑点:

间接调用边的判定逻辑
pub fn getIndirectEdges(b: Callable, c: Callable) -> bool {
    for(a in SpecifiedCallable(...)) {  // 这个循环的语义是什么?
        if (b in a.getAnAncestorCallee() && c in b.getCallee()) { ... }
    }
}

具体诉求

  1. 示例代码注释增强

    • 在关键函数添加执行流程图(如getIndirectEdges的调用关系判定过程)
  2. 配套概念文档

    • 创建《调用链分析模式设计指南》
    • 说明Callable核心模型的属性与方法清单
  3. 可视化辅助

    当前逻辑的抽象表示建议:
    SpecifiedCallable(a) ←通过继承→ Callable
       ↓ getAnAncestorCallee()
       Callable(b) → getCallee() → Callable(c)
    

优先级建议
最急需澄清的部分(根据代码理解难度排序):

  1. a.getAnAncestorCallee()b.getCallee() 的精确语义
  2. SpecifiedCallable 与基础 Callable 的交互机制
@liyuyun-lyy liyuyun-lyy changed the title 需要更多的godel相关的教程或者资料 请求增强Godel示例代码的解读材料与教学指引 Feb 14, 2025
@zhouang777 zhouang777 self-assigned this Feb 21, 2025
@zhouang777
Copy link
Collaborator

zhouang777 commented Feb 23, 2025

API 问题建议可以按如下步骤试试看:

  1. 先查API文档:Callable文档,当然文档还并不详细,但多少提供了一些线索。
  2. 查看coref lib 代码,如Callable代码,在此处: Callable 代码
  3. 有一些程序分析的专有名词,可以问问看gpt。比如上面的例子,callee 是被调用方,caller是调用方。callable 是可被调用的元素,如方法、构造器等。getAnAncestorCallee() 就是递归获取所有当前callable调用的其他callable。

@zhouang777
Copy link
Collaborator

zhouang777 commented Feb 23, 2025

SpecifiedCallable 与基础 Callable 的交互机制

遵循面向对象的继承方式,在这个例子中,SpecifiedCallable 是Callable的子集,通过签名字符串指定。在 specified_callable_signature 可以看到。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants