问题标签 [java-bytecode-asm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
917 浏览

java - 在运行时将多个 Java 类与 ASM 组合

我想将几个java类合并为一个。我已经阅读了 ASM 文档和这个http://www.jroller.com/eu/entry/merging_class_methods_with_asm但我无法理解如何实现我的目标。

有没有更详细的例子?

谢谢

0 投票
1 回答
226 浏览

java - 堆叠几个 ASM-Bytecode 访问者的简单方法?

我目前正在实现一些代码,对于类的每个方法,应该在 .class 文件上运行几个访问者,以检测其字节码。目前,我刚刚实现了一个 MethodRenamerVisitor,但这已经变得很尴尬:

我现在希望将其他访问者应用于每个 BytecodeMethods。我是否过于复杂了?如果我能有以下形式的东西,那将是理想的:

所以我可以轻松地堆叠我想要运行的所有访问者,然后只有最后我必须将它们保存在磁盘上。请记住,每个访问者都会添加/删除/修改它正在访问的方法!

0 投票
1 回答
89 浏览

java - Eclipse 使用 ASM 4.0 显示非通知参数名称。如何解决这个问题?

在 Eclipse IDE 中使用 ASM 4.0 时,我得到的只是这些非通知参数名称: 在此处输入图像描述

我怎样才能解决这个问题?我过去看过图书馆的部分源代码,据我记得,它们似乎有真正的名字,所以我想这一定是我没有加载的东西?

R:附加JavaDoc似乎解决了变量名的问题。不过,还有一个小谜团需要澄清:

使用 API 时,它确实看起来 ClassNode.methods 是 List 类型。但实际上,查看它的源代码,我们发现它实际上是一个 List:

还有什么我想念的吗?我知道问题可能与 Java 缺乏泛型具体化有关,需要其他类型的英特尔来了解这些列表实际代表什么?

在此处输入图像描述

0 投票
1 回答
582 浏览

java - 使用 ASM 字节码进行测试

假设我正在检测一个类,我想在其中向方法的某些部分添加一些指令。例如,让我们考虑我想开发一个访问者V将方法中存在的方法调用指令重命名C.m()C.n()to 的情况C.n_detour()

什么是最简单的方法来测试运行后V是否C确实会得到预期的结果?我在这里谈论 xUnit 样式测试。

起初我以为我可以跑TraceMethodVisitor过去C,并将它与我自己的字符串进行比较,但结果发现有很多与我的测试无关的“装饰”指令(例如行号等)(见格式化 TraceClassVisitor 的输出)。

从理论上讲,我知道我可以让一些访问者运行并检查 a 的存在C.n_detour()和不存在C.n(),但我宁愿按照上述方法使用更多的东西(比较每条指令的指令)。

我查看了 ASM 的 Tree API,但它看起来并没有那么好,因为这些decoration指令也显示在那里。

有没有人过去使用 ASM 测试代码的经验?

0 投票
3 回答
178 浏览

java - 格式化 TraceClassVisitor 的输出

假设我想用 asm 库漂亮地打印方法的字节码。

通过TraceClassVisitor将看起来像

现在,问题是我只关心

其他一切都与我无关,所以我想消灭它们。

我曾想过通过继承来过滤我不想要的东西TraceMethodVisitor,但它实际上是一个最终类(真糟糕!)。

有什么方法可以格式化 a 的输出TraceClassVisitor吗?如果不是,您认为过滤掉我不关心的东西的最佳方法是什么?

0 投票
4 回答
8439 浏览

java - 在 ASM 字节码中漂亮地打印一个方法

我正在尝试(没有成功)打印给定方法的内容。以下代码几乎可以解决问题:

运行它

导致

我想得到的只是

没有签名,评论和任何东西。我怎样才能做到这一点?

0 投票
1 回答
2017 浏览

eclipse - Eclipse:错误(字节码大纲)源文件 [in PROJECT] 不在其项目的构建路径上

我刚刚安装了 ASM Eclipse 插件(并重新启动),它提供了改进的字节码大纲,我可以将它用于 JRE 类,但是查看我自己的代码,我在标题中收到错误消息。

我的 java 项目在 Build Automatically 上,我的源文件没有错误,我可以在项目属性的 Java Build Path 中定义的 Default output 文件夹中看到类文件。

0 投票
2 回答
170 浏览

java - 多态调用:从字节码解析目标方法

给定 Java 字节码和 ASM 字节码分析框架,
当多态调用发生时如何解析目标方法?

例如:

为后一行生成以下字节码:

该结构以父方法为目标。
但实际的方法是ClassB.foo()

如何解决将被调用的“真实”方法?

0 投票
3 回答
1995 浏览

java - Dalvik 的 ASM 或 CGLIB 模拟

我正在寻找可用于 Dalvik 字节码的 CGLIB 模拟。Android世界有这样的库吗?

也许,有一种方法可以即时将 CGLIB 结果转换为 Davlik 字节码?

0 投票
5 回答
1697 浏览

java - Java中的别名分析

有人可以为我指出一个框架或 Java 别名分析的实现。我查看了 asm 框架,但它只提供数据流分析和控制流分析。

更新:只是好奇,但有人知道 Findbugs 是否进行别名分析吗?