问题标签 [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 投票
2 回答
1299 浏览

java - 我可以使用与 ASM 相同的“生成器”生成 Java 字节码和源代码吗?

我的 Google foo 让我失望了。如果我有一些框架可以基于注释进行代码生成,并且我希望同时支持构建时代码生成,以便开发人员可以提前编译它,还可以查看生成了什么,甚至可能修改代码,但还为更多动态应用程序(例如基于插件的应用程序)提供运行时字节码生成,我可以将 ASM 用于这两个任务,还是我真的需要使用两个不同的库对此进行两次编程?如果可能,欢迎提供示例链接。

0 投票
1 回答
139 浏览

java - 检查方法是否有助于 permgen 内存

我正在与 permgen 内存泄漏错误作斗争。我检查正在运行的系统的能力非常有限,所以我不得不在源代码中徘徊。为了减少搜索区域,我只想找到(可能)消耗永久区域内存的方法。

例如,我有绝对被调用的根方法集。从该集合中,我需要找到可能从 permgen 区域消耗内存的方法的路径(即调用 String.intern() 等)。目前我面临两个问题:如何确定方法是否正在消耗 permgen 空间,第二个问题 - 我如何遍历字节码以遵循执行路径?

感谢提前,任何信息表示赞赏!

0 投票
2 回答
1314 浏览

java - 如何在注入 JVM 之前验证 Java 字节码?

我正在尝试验证“动态”生成的字节码!

我已经进行了几次尝试,一种尝试是在运行时使用 eclipse 编译器编译我的类,另一种是从内存中编译,如此处所述:

从内存编译

第一个结果看起来不错,但我仍然不能 100% 确定根据 JAVA 6 指南和安全测量以及正常的 OOP 模型,验证过程是否真正有效。

关于如何验证字节码的任何更好的方法?

0 投票
2 回答
769 浏览

java - 使用 javassist 用字节码中的方法替换 java 运算符

我的目标

为了能够在运行时检测何时进行比较(或任何其他操作,如 *、-、/、>、<、...

这应该通过使用 Javassist 或 ow2 ASM 编辑类的字节码来实现

必须达到什么

这段代码

必须成为

GreaterThan 将返回与 '>' 完全相同的结果,但也将用于保存比较的数量 然后每次进行比较时都会通知外部类

额外说明

它必须在有手术的地方进行。所以不仅在 if 语句中。

这表示

也必须成为

您对我如何使用 Javassist 或其他库实现这一点有任何建议吗?

我想这与 IFLT、IFGT 等操作码有关

0 投票
2 回答
7665 浏览

java - 使用 Instrumentation 向 Java 类添加代码:ASM 还是 BCEL?

我正在编写一个游戏引擎/库,其中我有一个事件调度程序类,它通过调用“已注册”事件处理程序类的侦听器方法来调度事件。可以通过调用适当的调度程序方法向事件调度程序注册事件处理程序/侦听器。

这显然会导致一些用于注册每个事件处理程序的样板代码(并且我的引擎的其他方面也有类似的样板代码),所以我想知道 - 在加载事件处理程序期间使用 Instrumentation 添加所有必要的代码怎么样类,因此在编码时不需要向事件调度程序显式注册 - 对调度程序的 register 方法的调用会在程序运行时自动添加。

据我了解,为了使用 Instrumentation,应该使用一些字节码修饰符 API。我知道两个 - ASM 和 BCEL。我应该使用哪一个?显然,这是我正在尝试做的一项简单的任务,所以我想要一个更容易学习和更好记录的任务。

编辑:这是一个具体的例子。

原始事件处理程序类:

改造后:

0 投票
2 回答
1060 浏览

java - ASM COMPUTE_MAXS 不适用于基本测试用例?

文章底部是测试用例。它给出了以下错误。但是我已经设置new ClassWriter(ClassWriter.COMPUTE_MAXS)了,所以它不应该自动计算最大堆栈并正确设置吗?

测试用例:

0 投票
1 回答
414 浏览

java - ASM 转换以找到具体的类类型

我正在开发一个项目,该项目将跟踪从包中的类到任何其他类的方法调用。重要的是我可以识别具体类型,并且我希望有一个最小的跟踪开销。触发探针的时间没有限制;它可以在调用方法之前或之后。

目前使用 ASM,但对它没有要求。该系统正在从 AspectJ 迁移,以允许动态连接,所以它已经过时了。

下面是目前的情况。'Tracer' 枚举/单例接收 probe(int) 并处理调用。找到从具体类型到引用类型的调用就足够了。

我更进一步的想法是以某种方式获取对被调用类的引用并调用 getClass() 来检索具体类型。如果堆栈包含 INVOKEINTERFACE 顶部的对象引用,这将是微不足道的,但被调用方法的任何参数都放在它上面。

考虑到参数的数量是已知的,计算对象引用的堆栈位置不会有问题,但是 java 无法从堆栈中的较低位置复制引用。

有什么建议吗?

干杯。

0 投票
2 回答
2846 浏览

java - 如何将 JVM 汇编代码编译成字节码?

如果我跑去javap -c ASM.class > ASM.java获取汇编代码,我将如何将它重新编译回 JVM 字节码?

0 投票
1 回答
4163 浏览

android - 在 Android 上使用 Groovy

随着ASMDEX(用于 dex 文件的ASM )和dexmaker的出现,难道不能将 Groovy 移植到 Android 上吗?两个框架都允许在运行时生成 dex 字节码。

据我了解,不可能从内存中的 APK 修改 dex 类。但是是否可以将这些类复制到可写内存,在运行时修改这些副本并使用它们?

还有什么需要移植来处理 dex 类文件?CGLIB ?

0 投票
1 回答
133 浏览

java - 字节码注入在哪里可能有用?

今年我打算写一篇软件工程硕士论文。我对 Java 中的字节码注入/操作很感兴趣。我想编写一些可能对 Java EE 开发人员有用的应用程序。不幸的是,我找不到任何可以使用字节码转换的真实用例。我考虑编写故障注入器或一些突变测试框架。遗憾的是,这样的项目已经存在,可能不符合论文要求(项目应该是创新的)。你还有其他建议吗?