文章总结: 本文详细解析了CodeQL中Expr表达式和MethodCall方法调用的核心概念与区别。Expr作为表达式的抽象基类,代表程序中能产生值的代码片段,具备可嵌套、有类型、有位置等特性,是数据流分析的关键节点。MethodCall是Expr的子类,专门表示方法调用行为,用于调用图分析和安全漏洞挖掘。文章通过对比表格阐明两者在本质、范围和用途上的差异,并给出实际应用建议:追踪数据流时使用Expr,分析调用关系时使用MethodCall。 综合评分: 85 文章分类: 代码审计,安全开发,安全工具,WEB安全
codeql中表达式(exrp)类型
原创
信安路漫漫 信安路漫漫
信安路漫漫
2026年6月30日 07:00 上海
在小说阅读器读本章
去阅读
在 CodeQL 中,Expr 和 MethodCall 是两个核心概念,它们分别代表程序中的表达式节点和方法调用事件,理解它们的区别对于编写精确的代码分析查询至关重要。
Expr(表达式)详解
Expr 是 CodeQL 中对“表达式”的抽象基类,它代表了程序中任何能产生一个值的代码片段。你可以把它理解为“计算结果的载体”。
核心定义:任何可以被求值、有返回类型、能作为参数传递或赋值给变量的代码结构,都是 Expr 的子类。
常见子类:
- AddExpr:加法表达式,如 a + b。
- FieldAccess:字段访问,如 obj.field。
- MethodCall:方法调用,如 obj.method()。
- NewExpr:对象创建,如 new MyClass()。
- Literal:字面量,如 “hello”、42、true。
- CastExpr:类型转换,如 (String) obj。
- ConditionalExpr:三元表达式,如 a ? b : c。
关键特性:
可嵌套:Expr 可以包含其他 Expr,形成树状结构。例如 a + b * c 中,b * c 是一个 MulExpr,它本身又是 AddExpr 的一个子表达式。
有类型:每个 Expr 都有一个关联的 Type,可以通过 getType() 获取。
有位置:每个 Expr 都有源代码中的起始和结束位置,可通过 getLocation() 获取。
数据流分析的起点/终点:在污点分析中,Expr 常被用作 DataFlow::Node 的来源(source)或汇点(sink)。
Expr 与 MethodCall 的核心区别
MethodCall 是 Expr 的一个具体子类,它专门表示对方法的调用行为。它不仅是一个表达式(因为它有返回值),更是一个“动作”或“事件”。
核心定义:代表代码中实际执行的一次方法调用,如 user.getName() 或 System.out.println(“hi”)。
| | | | | — | — | — | | 维度 | Expr (表达式) | MethodCall (方法调用) | | 本质 | 一个“值”的计算单元 | 一个“动作”的执行事件 | | 范围 | 非常广泛,包含所有能产生值的代码 | 非常具体,仅指方法调用这一种行为 | | 继承关系 | 父类 | 子类( MethodCall extends Expr ) | | 典型用途 | 用于数据流分析、类型检查、表达式匹配 | 用于查找特定方法的调用点、分析调用链、追踪参数流向 | | 示例 | a + b , obj.field , new Obj() , true | obj.method() , System.out.println(x) |
实际应用中的选择建议
当你想分析“某个值从哪里来、到哪里去”时,使用 Expr。例如,追踪用户输入如何流经多个表达式最终到达危险函数。
当你想分析“谁调用了哪个方法”或“这个方法的参数是什么”时,使用 MethodCall。例如,查找所有调用 executeQuery() 的地方,并检查其第一个参数是否来自用户输入。
简单来说,Expr 是“值”的世界,MethodCall 是“行为”的世界。在 CodeQL 中,MethodCall 是 Expr 的一种,但它的语义更丰富,包含了调用关系和参数信息,是进行调用图分析和安全漏洞挖掘的关键入口。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:信安路漫漫 信安路漫漫 信安路漫漫《codeql中表达式(exrp)类型》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论