问题标签 [bytecode-manipulation]
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.
java - 如何使用 ASM 将操作码从一个方法复制到 Java 类文件中的另一个方法?
这是一些代码。
这两种方法执行相同的操作。第一种方法的第二个参数是psudo-argument,所以我想把原代码清空,把这个方法做成这样……
我该怎么做这个动作?我试过这样。
但抛出空指针异常。是什么原因?
java - 向 Java 类添加编程注释
用法示例:
我想在类字段上添加一个自定义注释@MyContainer,然后在所有此类字段上自动添加相关的 Hibernate 注释(取决于字段类型和属性)。
另外,我需要向类添加 JAXB XmlType 注释,并将类型名称基于类名。
我还想根据他们的类型等向字段添加注释。所有添加的注释都应该在运行时可用(所以 hibernate / JAXB 可以找到它们)。
我知道以下选项:
- 预处理类源(坏选项)
- 在编译期间使用 javax.annotation.processing API 进行处理
- 使用 Java Assist 等工具进行编译后操作
- 使用 java.lang.instrument API 在类加载期间进行操作
- 用 AspectJ 做(不够强大)
我的主要目标是:
- 在类和源之间保持同步以进行调试
- 支持从 Maven 和 IDE (Eclipse / Intellij) 工作
如果已经做过此类事情的人可以推荐此类任务的最佳方法(也许还有潜在的陷阱),我将不胜感激。
java - 无法从空堆栈中弹出操作数
使用 ASM 4。我正在从另一种语言动态生成字节码。它正在生成以下内容,但我不清楚发生了什么。我的猜测是 try/catch 块正在干扰堆栈。前两行正在加载一个 Lambda2,然后它需要在最后成为堆栈中最深的项目,但我不明白是什么让它一路消失。
似乎在指令 13 处堆栈消失了。这就是它进入 try/catch 块的地方。堆栈进入 try/catch 块时是否会被丢弃?如果是这样,那将解释问题。
java - Java ASM4:超级(ASM4);?
好吧,我正在阅读 ASM4 字节码库上的 PDF 教程/文档/书籍(如果您愿意的话)。我正在尝试这些示例并通过阅读并实际输入代码,执行,然后从输出中学习来学习。我遇到了这部分:
链接在这里:http://download.forge.objectweb.org/asm/asm4-guide.pdf
我不知道在超级中传递什么。我的 IDE 也不是很有帮助。
java - Javassist:Bytecode.get() 不工作
bc.get()没有返回任何东西。我的目标是获取一个类的字节码。
java - 将 javassist 字节码操作与 maven 编译集成
我有一个使用 javac / aspectj 编译器编译的 maven 项目。
我想在编译了 javassist 程序的类上运行,该程序操纵编译的类并向它们添加东西。
我想使用“进程类”阶段来运行我的工具。
我的问题是用 javassist 对“目标/类”中创建的类文件进行迭代的最佳方法是什么,以便之后我可以加载、修复和保存。
另一个要求是也在测试类上运行该工具。
如果有一个开源项目可以做类似的事情,那么看到一个活生生的例子会很棒。
谢谢,
阿夫纳
constants - 在方法级别检测字节码
在上面的代码中,我在if语句中检测字节码。我正在使用IFEQ或IF_ICMPNE等常量来搜索字节码中的if语句。我想在每种方法中检测字节码。我可以使用哪些常量来执行此操作?或者怎么可能?
java - 生成实现 JSR 308“instanceof @MyAnotations”运行时检查的代码
JSR 308建议向 Java 添加类型注释。批准后,程序员将能够在当前允许 Java 类型的任何地方添加注释。这不仅包括方法/字段/本地/参数装饰,还包括构造函数调用、类型转换和最奇怪的 instanceof 检查。Checker 框架使用JSR 308 来实现类型限定符@NonNull
,例如对象类型或@Regex
字符串。
现在,Checkers 所做的就是静态分析您的代码。这就是所有编译时检查。没关系。但我想要的是一种可以在运行时进行检查的机制。您可以声明:
我也可以写:
但这与 没有区别x instanceof String
,不执行运行时检查。我需要一个编译时注释处理器或运行时字节码操纵器,它可以让我在instanceof
检查时运行任意代码并返回一个布尔值。Java可以做到这一点吗?
java - Java 字节码操作 - 许可问题?
如果我要发布一个对核心 Java 类(sun.*)进行字节码操作的实用程序,我应该担心许可问题吗?
提供更多上下文:为了运行自动回归测试套件,我们需要将自己的MockSystem.currentMillis()
实现注入到java.lang.System.currentMillis()
调用原始代码的任何位置。
由于我认为这个小型实用程序将对许多开发人员有用,我现在想知道当我的(即将成为)许可代码操作以其他方式许可的代码时是否涉及任何许可问题。MIT