问题标签 [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.

0 投票
1 回答
702 浏览

java - 如何使用 ASM 将操作码从一个方法复制到 Java 类文件中的另一个方法?

这是一些代码。

这两种方法执行相同的操作。第一种方法的第二个参数是psudo-argument,所以我想把原代码清空,把这个方法做成这样……

我该怎么做这个动作?我试过这样。

但抛出空指针异常。是什么原因?

0 投票
1 回答
818 浏览

android - 是否可以使用 Dexmaker 覆盖现有类中的方法?

是否可以在运行时通过代理或生成代码来更改已经使用Dexmaker加载的类的方法的行为?

更新

只是一句话:我想从我自己的应用程序中添加一个方法/修改现有的方法,而不是从 android 框架。

0 投票
5 回答
2206 浏览

java - 向 Java 类添加编程注释

用法示例:
我想在类字段上添加一个自定义注释@MyContainer,然后在所有此类字段上自动添加相关的 Hibernate 注释(取决于字段类型和属性)。
另外,我需要向类添加 JAXB XmlType 注释,并将类型名称基于类名。
我还想根据他们的类型等向字段添加注释。所有添加的注释都应该在运行时可用(所以 hibernate / JAXB 可以找到它们)。
我知道以下选项:

  1. 预处理类源(坏选项)
  2. 在编译期间使用 javax.annotation.processing API 进行处理
  3. 使用 Java Assist 等工具进行编译后操作
  4. 使用 java.lang.instrument API 在类加载期间进行操作
  5. 用 AspectJ 做(不够强大)

我的主要目标是:

  1. 在类和源之间保持同步以进行调试
  2. 支持从 Maven 和 IDE (Eclipse / Intellij) 工作

如果已经做过此类事情的人可以推荐此类任务的最佳方法(也许还有潜在的陷阱),我将不胜感激。

0 投票
1 回答
3328 浏览

java - 无法从空堆栈中弹出操作数

使用 ASM 4。我正在从另一种语言动态生成字节码。它正在生成以下内容,但我不清楚发生了什么。我的猜测是 try/catch 块正在干扰堆栈。前两行正在加载一个 Lambda2,然后它需要在最后成为堆栈中最深的项目,但我不明白是什么让它一路消失。

似乎在指令 13 处堆栈消失了。这就是它进入 try/catch 块的地方。堆栈进入 try/catch 块时是否会被丢弃?如果是这样,那将解释问题。

0 投票
1 回答
640 浏览

java - Java ASM4:超级(ASM4);?

好吧,我正在阅读 ASM4 字节码库上的 PDF 教程/文档/书籍(如果您愿意的话)。我正在尝试这些示例并通过阅读并实际输入代码,执行,然后从输出中学习来学习。我遇到了这部分:

链接在这里:http://download.forge.objectweb.org/asm/asm4-guide.pdf

我不知道在超级中传递什么。我的 IDE 也不是很有帮助。

0 投票
2 回答
456 浏览

java - Javassist:Bytecode.get() 不工作

bc.get()没有返回任何东西。我的目标是获取一个类的字节码。

0 投票
1 回答
3421 浏览

java - 将 javassist 字节码操作与 maven 编译集成

我有一个使用 javac / aspectj 编译器编译的 maven 项目。
我想在编译了 javassist 程序的类上运行,该程序操纵编译的类并向它们添加东西。
我想使用“进程类”阶段来运行我的工具。
我的问题是用 javassist 对“目标/类”中创建的类文件进行迭代的最佳方法是什么,以便之后我可以加载、修复和保存。
另一个要求是也在测试类上运行该工具。
如果有一个开源项目可以做类似的事情,那么看到一个活生生的例子会很棒。
谢谢,
阿夫纳

0 投票
1 回答
35 浏览

constants - 在方法级别检测字节码

在上面的代码中,我在if语句中检测字节码。我正在使用IFEQIF_ICMPNE等常量来搜索字节码中的if语句。我想在每种方法中检测字节码。我可以使用哪些常量来执行此操作?或者怎么可能?

0 投票
2 回答
322 浏览

java - 生成实现 JSR 308“instanceof @MyAnotations”运行时检查的代码

JSR 308建议向 Java 添加类型注释。批准后,程序员将能够在当前允许 Java 类型的任何地方添加注释。这不仅包括方法/字段/本地/参数装饰,还包括构造函数调用、类型转换和最奇怪的 instanceof 检查。Checker 框架使用JSR 308 来实现类型限定符@NonNull,例如对象类型或@Regex字符串。

现在,Checkers 所做的就是静态分析您的代码。这就是所有编译时检查。没关系。但我想要的是一种可以在运行时进行检查的机制。您可以声明:

我也可以写:

但这与 没有区别x instanceof String,不执行运行时检查。我需要一个编译时注释处理器运行时字节码操纵器,它可以让我在instanceof检查时运行任意代码并返回一个布尔值。Java可以做到这一点吗?

0 投票
3 回答
388 浏览

java - Java 字节码操作 - 许可问题?

如果我要发布一个对核心 Java 类(sun.*)进行字节码操作的实用程序,我应该担心许可问题吗?

提供更多上下文:为了运行自动回归测试套件,我们需要将自己的MockSystem.currentMillis()实现注入到java.lang.System.currentMillis()调用原始代码的任何位置。

由于我认为这个小型实用程序将对许多开发人员有用,我现在想知道当我的(即将成为)许可代码操作以其他方式许可的代码时是否涉及任何许可问题。MIT