问题标签 [bcel]

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 回答
856 浏览

java - 更改已编译类中的所有类引用

我正在尝试修改已编译的类(源代码不可用),例如,我想将所有java.lang.Objectsome.packageName.SomeClass.

引用我的意思是:

  • 字段类型
  • 方法返回类型
  • 方法参数类型
  • 超类型
  • 方法体中的变量类型
  • 静态类引用(例如java.lang.Object.class
  • 泛型类型参数
  • 等等。

基本上,通过这个例子,修改后的类应该不能java.lang.Object直接访问该类,而只能通过some.packageName.SomeClass. 请注意,示例类可能是来自 jre 或不是来自 jre 的任意类。所提供的替代品将与原件的预期完全相同。

这可以通过使用 BCEL 或 Javassist 实现吗?如果没有,是否有任何其他库可以提供实现此目标的功能?

0 投票
0 回答
240 浏览

java - 如何在java中解析classfile?

我如何解析java中的类文件,在这段代码中,我解析当前类文件调用bcel,但是如果我想解析其他包中的其他类文件,例如(netbeans/src/filename.class),我应该怎么做?可以通过它的路径解析任何类文件吗?此代码只能应用于同一个(当前类文件),但我想要一种通过路径解析任何类文件的方法,我可以这样做吗?怎么做?

0 投票
3 回答
88 浏览

java - 将包+类名翻译成.class文件名

我正在编写一个分析.class文件的程序。我想将包和类名附加到我的输出中。

我的计划是编写一个函数,它将包和类名作为输入并找到相应的.class文件(这样用户也不必输入,也不会弄错),“find”应该是读作“给我一些我可以用作 BCELClassParser构造函数的参数的数据”(文件名,或 zip 文件的名称和 zip 文件中的名称)。

我该怎么做?java是否带有可以做到这一点的东西?我理解名称解析要在 a 的上下文中完成CLASSPATH,因此用户可能也应该提供其中一个;没关系。

注意:解决方案不应执行文件中的任何代码.class。只是字节,女士;-)

0 投票
0 回答
104 浏览

java - 用 BCEL 替换一个类

我正在编写一些代码,我想使用 BCEL 将所有对 SomeClass 方法的调用替换为对 SomeOtherClass 方法的调用。

现在,据我了解,我可以通过以下方式做到这一点:

  1. 遍历指令列表
  2. 查找引用 SomeClass 的所有或invokevirtual指令invokestaticinvokespecial
  3. 用引用 SomeOtherClass 的适当的 invokeX 替换那些

这需要我重写很多调用,并且我必须处理至少三种不同的情况(invokevirtualinvokestatic调用invokespecial)。相反,是否可以通过操作常量池并用 SomeOtherClass 替换指向 SomeClass 的所有常量来做到这一点?如果是这样,怎么做?

0 投票
1 回答
159 浏览

java - 在运行时查看类字节码

我有 BCEL 动态修补类,我动态地重新加载类。我不确定我真正重装了什么课程。

我怎样才能检查它?

如何查看类字节码而不将其保存为文件?

谢谢。

0 投票
2 回答
816 浏览

java - How to get bytecode of cglib proxy class instance?

I'm trying to get bytecode of cglib enhanced object this way using BCEL:

But I'm getting:

What should I do to get bytecode from Enhanced object?

0 投票
1 回答
374 浏览

java - 识别 Apache 字节码工程库 (bcel) 中的局部变量数据类型

我正在使用 Apache bcel 库来读取 java 类文件。org.apache.bcel.classfile.Method.getLineNumberTable()它允许从调用中识别给定方法的局部变量名称。

但细节不包括局部变量的数据类型相关细节。并且也找不到任何其他获取变量 daat 类型的方法。一点帮助将不胜感激

0 投票
1 回答
277 浏览

java - finbugs 错误构造方法Gen

我有一个非常奇怪的问题findbugs

这个异常来自 CI 服务器,如果我在本地运行 findbugs,但如果我从 Idea 运行 findBugs - 一切都很好。

我找到了这个 bugreport,但是在当前项目中,我们使用javac了编译器,而新代码没有任何 lambda 东西。

0 投票
1 回答
216 浏览

java - 从未加载的 java 类中获取字节码

我有一个项目,其中包含一个文件夹“输入”,其中包含一些 java 文件(例如 test.java)。这个文件夹不是源根目录,这是正确的。我只想用我的程序分析输入文件夹中的文件。一个目标是从输入文件夹中的文件中获取字节码并将其保存在字符串中。我读了很多关于从类(java 代理,bcel)获取字节码的内容,但我不太清楚应该如何开始。你对我有什么想法和建议吗?

编辑: 我编译了我的文件并将其保存到一个字节数组中。我使用了某人提到的 javaassist 库。我的代码现在是:

结果我得到:

如何从字节数组中获取“人类可读”形式的字节码,例如:

有人有什么想法吗?

0 投票
1 回答
2886 浏览

java - 创建简单类文件时方法签名的非法常量池索引

我想创建一个生成 Java 字节码的简单编译器。为了生成代码,我使用了Apache BCEL库。

但是,我未能创建一个带有什么都不做的 main 方法的简单类。我使用以下代码(我知道它是 Scala,但这并不重要,稍后您会看到)来生成类文件:

运行程序时会生成类文件,但是在执行时java MiniPascal出现以下异常:

我阅读了 Java Bytecode 并知道常量池大约是类文件内容的 60% 并存储所有文字的名称,但我还没有弄清楚异常的情况。

我期待着您的建议。谢谢你的帮助!