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

java - Java ASM 帮助需要

我使用 Java ASM 编写了一个简单的程序来生成通过编译以下类生成的字节码。

下面给出了我为这个类生成字节码的代码。

这编译成功,当我尝试运行它时,它给出了以下错误。

谁能帮我避免这个错误。如果有人可以解释错误的原因以及如何避免它,请帮助我。

谢谢你。

跟进:

当我像 java Main 一样运行它时,会出现以下错误。

0 投票
1 回答
904 浏览

java - 在我的项目包之外的类上使用 asm(java 字节码)类阅读器?

我通过输入类的路径来获取(可以说“C:\ Temp \ Test.class)。我想做的是为这个类初始化一个ClassReader并使用ClassAdapter和ClassWriter开始检测它(我知道如何做仪器)。

我不知道 - 我如何将那个班级“感染”成班级阅读器?

我尝试使用构造函数 ClassReader(String) 但它是徒劳的

谢谢 !(对不起我的英语不好)

0 投票
4 回答
1694 浏览

java - Java中的原始类型是否有哈希码/堆地址?

我试图找到一些近似值来解决堆问题,你们给了我这个函数System.IdentityHashCode(Object)

问题是 - 这个函数不适合原始类型。我会解释为什么。

我被作为输入 Java 编译程序 - 类文件。我的目标是绘制一些图表,其中将包含有关时间之间变量访问的一些信息。我事先不知道代码的外观,我的策略是为每个 LOAD 和 STORE 指令检测我自己的字节码。我正在使用 ASM Java 字节码检测。

因此,我不能做类似的事情:

因为我不知道类型是 int、double、long 等。

我希望能够确定同一类的不同实例之间:

例如 :

但是当涉及到字节码时,名称“b”/“c”与属性 a 之间没有关系。我“看到”的只是 a 增加了。两者都被视为一个!如果是这样,Object a 我可以使用 System.identityHashCode() 来区分它们。但我不能。

为了清楚起见,请看以下示例:

它将被翻译(主函数)为以下字节码:

正如你所看到的,我在堆栈上得到的只是整数 c 的值。因此,鉴于该代码,我无法确定这两个 c 之间!

0 投票
2 回答
13847 浏览

java - 生成“你好,世界!” 带有 Java ASM 库的类

我已经开始为我正在处理的编译器项目使用 ASM API。但是,我发现文档对于很多地方的新手来说都不是很清楚,我认为有一个很好的可靠示例来生成一个简单地打印“Hello, World!”的类。将是一个很好的例子。

目前,我可以生成一个带有 main() 的类(使用 ClassWriter、ClassVisitor 和 MethodVisitor 类),但我似乎无法弄清楚如何生成 main 的主体。谁能给我一个在 ASM 中生成类文件的示例:

  • 包含一个 main()
  • 在 main() 中创建一个本地字符串变量,其值为“Hello, World!”
  • 打印变量
0 投票
1 回答
1088 浏览

java - 如果存在注释,则将接口添加到转换后的类

我正在使用ClassAdapterasm 框架编写字节码转换器。如果类上存在自定义注释,我想添加一些方法并使类实现接口。添加方法工作正常,但我想知道让类实现接口的最佳方法是什么。由于visitAnnotation仅在 after 调用visit,我需要以某种方式延迟调用超级访问方法并缓冲所有需要的信息,直到那时。

有没有人实现过类似的东西?我是否应该为此使用 asm 的树 API,尽管包文档建议尽可能避免使用它?

这是转换的一般结构:

0 投票
1 回答
2581 浏览

java - 调用字节码类方法,java

我是 java 新手,(我曾经在 .NET、Lua 中编程……)并且我开始使用 ASM。所以我不能使用“Foo”类的任何方法,我该如何调用这些方法?

非常感谢...

代码:

*新代码工作*

感谢 Paŭlo Ebermann,下一步我将尝试使用实例加载类(我认为类似于 "Class s= new simple()" )。

0 投票
3 回答
838 浏览

java - 除了使用反射之外,如何填充 JavaBean

你知道我是否可以填充一个javabean,但我不想使用反射。

例如,我有这个 xml 模板来填充它

示例 XML 文件

我想在 Java bean 上调用 setCard 但我不想使用反射,因为我以前使用过它而且速度很慢,

有没有其他选择?例如,Hibernate 是如何做到的?

谢谢卡洛

0 投票
3 回答
14113 浏览

java - 了解常量池的 javap 输出

在一个非常简单的 HelloWorld 应用程序上运行 javap 时,我对常量池周围的输出有些困惑。

测试代码

Javap -c -verbose 输出(截断)

好的,所以在第 3 行,我们看到通过 #22 将“hello world”常量推入堆栈,但 const #23 似乎保留了实际值。我想我对 #(number) 出现在打印输出右侧的含义有些困惑。

Oracle/Sun 的 javap 手册页还有很多不足之处。

0 投票
2 回答
571 浏览

java - Asm 字节码查询

大家好,我正在尝试使用 ASM 字节码 Tree Api 对类进行静态分析。我想我有一个非常基本的问题。在一个说 foobar() 的方法中,我在 foobar 中有一个指令列表(InsnList 有一个列表)。现在我想检查是否在第 10 条指令处,是否调用了函数“barfoo(String args)”。

另外,我需要验证特定指令是否是条件指令。

谢谢和问候, SJ

注意:我已经可以阅读一个类并找到我感兴趣的特定方法并遍历该方法的每个指令。

解决(见:格雷格的评论):

0 投票
1 回答
1633 浏览

java - 变量定义和赋值检测asm字节码

我正在尝试使用 ASM 字节码树 API 对 Java 代码进行静态分析。我有一个 ClassNode cn、MethodNode m 和该方法中的指令列表说 InsnList 列表。

假设对于给定的指令(即 AbstractInsnNode)s,我需要在上述指令列表中找到变量 at 的所有定义/赋值。为了更清楚起见,假设在第 2 行定义并初始化了一个变量 var,然后在第 8 行分配了一些其他值,然后在第 12 行使用。在这种情况下,第 12 行是 my s。另外,假设中间的行中有很多条件代码。

这可能与ASM有关吗?如何??

谢谢和问候, SJ

为了清楚起见,

在这里,假设条件是 JumpInsnNode (当前指令),我需要查找是否(以及在哪里)条件中的任何变量(在这种情况下为 v.rank 和 numIter)在上述代码中的任何位置被修改或分配。保持简单,只是成员变量(没有静态函数或委托给另一个类的函数)。