问题标签 [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 回答
1883 浏览

java - JAVA ASM 中的类转换器 - 可以生成吗?

我想开始使用 Java ASM 来转换我的项目中的类 - 向String某些方法添加一个参数并使用该参数发送日志。

在我读过的asm网站上

如果要实现类转换器,编写两个Java源文件(转换前后),并使用ASMifier模式下插件的比较视图来比较等效的ASM代码。

但是我发现使用 Java ASM 非常困难。有没有可以生成的工具class transformer?这将非常有用!

0 投票
1 回答
640 浏览

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

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

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

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

0 投票
1 回答
140 浏览

java - 用于对 ASM 代码执行特定“数据分析”的 Java 工具

我需要使用 Java 类或可在 Eclipse 上使用的任何东西对 ASM 代码进行特定的“数据分析”。具体来说,我需要用这个顺序确定一个变量的三个步骤:1)使用;2)初始化;3) 删除。

谢谢。

0 投票
1 回答
599 浏览

java - ASM 中的哪些指令仅用于调试?

我想简化我的 asm 代码。到目前为止,我正在使用 Eclipse 中的字节码大纲来学习如何编写我的代码。由于我只看到带有调试信息的字节码,我真的不知道我可以安全地遗漏哪些内容,我希望由知识渊博的人快速回答,而不是自己测试每个可能的情况。

这些假设是真的吗?

  1. 我可以混合不同的风格,即使在同一个类或方法中(将没有调试信息的代码注入到有调试信息的方法中)
  2. visitLabel只需要作为跳转指令的目标,而不是围绕每条指令
  3. visitLineNumber可以省略(调试信息)
  4. visitLocalVariable可以省略(调试信息)

谢谢!

0 投票
1 回答
703 浏览

java - javaagents:转换顺序

在我的项目中,我想分两个阶段转换字节码。顺序很重要。

  1. 首先我需要改变方法定义
  2. 然后调用方法的方式

例如

  1. 将定义从 更改String hello()String hello(String s)
  2. 将呼叫从更改Hello.hello()Hello.hello("newArgument")

我设法添加了变压器,这是第一步。

我的问题是:我可以这样添加新的变压器吗:

并确定MyClassFileTransformer他的工作之前MyClassFileTransformer2

0 投票
2 回答
929 浏览

java - Java asm get "this" object from method variables

I need to know the name of the object which called invokevirtual operation(in the following format - Objectname@object_id). Is it possible given only MethodInsnNode object? I know that it is stored with the index 0 in local variables but I don't know how to get it.

0 投票
1 回答
204 浏览

java - ASM 方法执行监听器

是否有可能实现一个能够拦截主方法内部所有内部方法调用的适配器?如果我们有这门课...

为“kill”方法安装侦听器将拦截对“Grave”类的“dig”和“put”方法的调用。如果这是可能的,一些代码也会很棒。

谢谢。

0 投票
1 回答
133 浏览

java - JAVA ASM:为什么修改会导致嵌套异常?

在我的项目中,我ASM用来更改方法签名。我选择使用 RMI 的方法并以这种方式更改它们:

从:

并从

所以定义和调用都改变了。

令人惊讶的是,它在某些情况下有效,并ThreadId通过控制流传递。

但是一种方法导致:

我不知道为什么会发生此错误。你能解释一下吗?或者也许给我一些建议我应该如何解决它?任何帮助都会很棒!

0 投票
1 回答
312 浏览

java - 检测不适用于通过反射调用的方法

我正在跟踪 Java 应用程序的执行以对执行跟踪进行动态分析。

一切都很好,但是当通过反射调用方法时。我可以看到调用,Method.invoke但之后我的跟踪不包含通过反射执行的指令。

一旦程序返回“常规”执行,程序就会再次正常跟踪。

编写工具的人使用了ASM库。

0 投票
1 回答
752 浏览

java - 使用 ASM 访问 Java Stack 中的第二个顶级对象

我正在使用 ASM 来监视字段访问(putfield 和 getfield)。(对于putfield,)我的问题是,当栈顶是一个基本值(X)而第二个栈顶是一个对象引用(Y)时,我如何插入一些Java指令来调用我的方法与第二个对象引用( Y)作为它的一个参数,从我的方法返回后,两个(X和Y)不会丢失?</p>

总之,如何在 Java 字节码级别访问第二个顶部对象引用而不影响 Java 中堆栈的顶部值(在我访问之后)?

我想使用dup,但它只能处理堆栈的顶部值。因此,它适用于 getfield,因为没有值,我可以直接复制它。

有没有更好的方法来做到这一点?

谢谢。