问题标签 [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 投票
3 回答
60 浏览

java - 是否有任何东西可以索引 java 源代码,但还包括来自已编译字节码的信息?

我需要搜索一个大型代码库,并且我想获得搜索结果,例如:

'哪些类调用方法 X() '

'给我接口 Y 的具体实现者'

您可以在 Eclipse 中做的那种方便的事情,但不幸的是,这对我来说不是练习。

我正在考虑使用 solr 并可能使用 BCEL 或类似方法添加语义信息,但似乎这应该已经存在?

0 投票
1 回答
460 浏览

java - Java BCEL 中的字符串(来自字节码)不同于 Javap 和其他工具

我使用 BCEL 库从特定方法中提取字节码。为此,我使用了 BCEL Method 类中的 getCode() 函数。

当我做:

如果您查看 lcd 操作码,我会得到以下信息:

编码错误

但是,我想要那个(对于液晶操作码):

在此处输入图像描述

如果我用JavaP反编译,结果如第二张图。

问题出在编码上,我认为应该是 UTF-8。我查看其他主题如何更改编码,但我不确定这是问题所在。

如何使用 BCEL 进行良好的字符串编码?

编辑:

第一张图片来自 Java 控制台。第二张图来自dirtyJOE v1.5

0 投票
2 回答
702 浏览

java - 类文件常量池中缺少类

我正在使用字节码分析来获取类文件的所有导入类(使用 BCEL)。现在,当我阅读常量池时,并非所有导入的类都被称为 CONSTANT_Class(请参阅规范),而只是作为 CONSTANT_Utf8。我现在的问题是:我不能仅仅依靠常量池中的 CONSTANT_Class-entries 来读取导入的文件吗?如果它是类名,我真的必须查看每个条目并猜测吗?这在 imo 的每种情况下似乎也不正确。还是我必须通读整个字节码?问候

0 投票
2 回答
410 浏览

jsf - taglib 调用 managedbean 调用

我有一个这样的托管bean(会话范围):

我喜欢这样称呼

我所知道的是:不可能使用 a 和 b 参数。

好的:这应该是例如使用标记库调用它的“静态”可能性:

如何动态调用它?使用 bcel 或 URLClassLoader?

0 投票
5 回答
1710 浏览

java - 是否可以在 java 类文件中存储字节数组(原始数据)?

我正在使用Apache BCEL动态创建 java 类,每个类都有自己的关联图像。这些生成的类实现以下接口:

在动态实现“getImage”方法时,我可以在调用该方法时生成字节码来创建/返回字节数组,但如果可能的话,我宁愿只返回对字节数组的引用。是否可以将原始数据存储在 java 类文件中?

0 投票
2 回答
1314 浏览

java - 如何在注入 JVM 之前验证 Java 字节码?

我正在尝试验证“动态”生成的字节码!

我已经进行了几次尝试,一种尝试是在运行时使用 eclipse 编译器编译我的类,另一种是从内存中编译,如此处所述:

从内存编译

第一个结果看起来不错,但我仍然不能 100% 确定根据 JAVA 6 指南和安全测量以及正常的 OOP 模型,验证过程是否真正有效。

关于如何验证字节码的任何更好的方法?

0 投票
0 回答
226 浏览

java - 猴子修补库,直到 OSS 项目发布补丁

我在我的代码中使用了一个完善的开源库,我在其中发现了一个错误并将其报告给社区。但是我没有资格修复这个错误,因为我不知道更改代码的所有副作用。该错误位于最终类的私有函数中。该框架将这个类的一个已经实例化的版本传递给我的函数。我想知道是否有任何合适的猴子修补技术可以用来在我需要的时间内修复该类的该实例。这将限制任何潜在的不良副作用。我知道有些技术可能会有所帮助,例如面向方面的编程、字节码操作或反射。在这种情况下我应该怎么做?

非常感谢您的建议。

0 投票
2 回答
510 浏览

java - 提取和执行任意 Java 字节码序列

给定 Java Class A 的 .class 文件,有没有办法(例如使用 BCEL、ASM 等)提取给定的字节码序列(假设它是一个基本块),将其放在单独的位置,然后再执行那个字节码序列?

示例:源代码具有以下行 ... a += b; b += 21; . .

我只能访问字节码表示。我想提取这些字节码并将它们视为黑匣子。在 A 类的指令中,而不是源代码行 'a += b;' 我希望它指向这个外部黑盒 X,它包含适当的缺失字节码序列。我想向黑盒提供堆栈帧上的所有必要变量(例如,a、b 的当前值,也许是要在黑盒 X 中使用的方法参数......),然后,在执行字节码序列后,黑匣子会将控制权连同新更新的帧变量一起返回给原始 A 类...

感谢您的任何想法。

编辑:

正如下面所建议的,最合理的黑盒应该是存根类文件中的存根方法。那么问题就变成了,我如何最合理地从这个指令序列创建这个格式良好的存根类和方法,以及如何将控制权从原始 A 类转移到。理想情况下,这将在编译时“离线”完成时间。

0 投票
2 回答
7665 浏览

java - 使用 Instrumentation 向 Java 类添加代码:ASM 还是 BCEL?

我正在编写一个游戏引擎/库,其中我有一个事件调度程序类,它通过调用“已注册”事件处理程序类的侦听器方法来调度事件。可以通过调用适当的调度程序方法向事件调度程序注册事件处理程序/侦听器。

这显然会导致一些用于注册每个事件处理程序的样板代码(并且我的引擎的其他方面也有类似的样板代码),所以我想知道 - 在加载事件处理程序期间使用 Instrumentation 添加所有必要的代码怎么样类,因此在编码时不需要向事件调度程序显式注册 - 对调度程序的 register 方法的调用会在程序运行时自动添加。

据我了解,为了使用 Instrumentation,应该使用一些字节码修饰符 API。我知道两个 - ASM 和 BCEL。我应该使用哪一个?显然,这是我正在尝试做的一项简单的任务,所以我想要一个更容易学习和更好记录的任务。

编辑:这是一个具体的例子。

原始事件处理程序类:

改造后:

0 投票
0 回答
338 浏览

java - 如何使用 Instrumentation 获取变量值?

我目前正在尝试开发一个 java 代理来获取堆栈跟踪,其中包含被调用方法的名称和该方法传递的值。我有一个简单的应用程序,它创建了一些不同对象的实例并使用它们来测试我的 java 代理。

哦,我也在使用 BCEL。

目前,我能得到的只是所有具有方法和属性的类。

这是java代理的代码:http: //pastebin.com/HFkgswJH

这是我运行时得到的: java -javaagent:instr.jar bookStore.jar :http ://pastebin.com/gsjat72E

那么,如何在调用方法时获得跟踪?例如,如果在我的简单应用程序中我这样做:

Book myBook = new Book("Title", "Author", "Thriller");

myBook.setTitle("这很有趣");

我想获取方法名称“setTitle”和传递的字符串值:“这很有趣!”

有任何想法吗?关联?图书馆?

谢谢!