You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Soot分析Kotlin项目生成CFG时遭遇soot.SootResolver$SootClassNotFoundException错误求助

解决Soot分析Kotlin类时找不到kotlin.Metadata的问题

这个错误的核心原因很明确:Kotlin编译生成的.class文件依赖Kotlin标准库中的kotlin.Metadata类,但你的Soot命令没有把该标准库加入类路径。Kotlin编译器会给每个编译后的类自动添加@kotlin.Metadata注解,用来存储Kotlin代码的元数据信息,Soot在解析类结构时需要加载这个注解类,找不到就会抛出SootClassNotFoundException。

下面是具体的解决步骤:

1. 获取Kotlin标准库jar包

你需要找到对应版本的Kotlin标准库(kotlin-stdlib)jar文件:

  • 如果用Gradle或Maven管理项目,标准库jar通常在项目的build/libs目录,或者本地Maven/Gradle仓库中(路径类似~/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib/[版本号]/)
  • 也可以直接从Kotlin官方渠道下载对应版本的标准库jar

2. 修改Soot命令,添加标准库到类路径

将Kotlin标准库jar加入Soot的类路径中,注意不同系统的路径分隔符:

Linux/macOS系统

假设kotlin-stdlib-1.8.20.jar和你的HelloWorld.class在同一目录,命令修改为:

java -cp sootclasses-trunk-jar-with-dependencies.jar:kotlin-stdlib-1.8.20.jar soot.tools.CFGViewer -cp .:kotlin-stdlib-1.8.20.jar -pp HelloWorld

Windows系统

Windows用;作为路径分隔符,命令改为:

java -cp sootclasses-trunk-jar-with-dependencies.jar;kotlin-stdlib-1.8.20.jar soot.tools.CFGViewer -cp .;kotlin-stdlib-1.8.20.jar -pp HelloWorld

额外提示

如果你的项目是用构建工具(Gradle/Maven)管理的,建议直接在构建脚本中引入kotlin-stdlib依赖,这样可以自动管理类路径,避免手动找jar包的麻烦。

内容的提问来源于stack exchange,提问作者Hilbob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 12:12:42