gpt4 book ai didi

java - 字节码特定部分的修改

转载 作者:行者123 更新时间:2023-11-29 05:46:26 25 4
gpt4 key购买 nike

如何修改字节码的特定部分以添加内容?

我的意思是我知道我想要修改什么类、什么方法(或字段)以及什么行号,但我想知道我实际上将如何修改特定行的字节码/类的字段。

假设我有一个类,GammaController

public class GammaController {
private int gamma = 60;

public int getScreenGamma() {
return gamma;
}

public void setScreenGamma(int gamma) {
this.gamma = gamma;
}
}

但我想在不编辑文件的情况下更改 GammaController.setScreenGamma() 以不允许值超过 100。我知道该方法位于第 8 行(我们现在将忽略包),并且必须在第 9 行检查是否超过 100,将方法中执行设置的部分移到 1 行。

假设我也知道将进行检查的字节码。我想要做的是运行一个针对包含 GammaController.class 的 jar 的应用程序,并让应用程序使用字节码修改类,以检查该值以确保它不超过 100。我将如何去做这个?

最佳答案

AspectJ (或任何 AOP 库)在这里可能会有一些用处。它允许您定义切入点,例如何时调用特定方法(或何时定义字段等)。然后您可以应用建议,这是您在连接点之前/之后执行的操作(连接点是应用切入点的位置)。

例如,

每当调用该方法时,应用验证 Gamma 值 < 100 的建议。如果该值无效,则抛出异常。如果有效,则照常继续。

如果您真的想修改不属于切入点可以处理的类别的个别代码行,您可以按照@DavidTitarenco 的建议使用 ASM 库

关于java - 字节码特定部分的修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15722902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com