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

java - BCEL == java 的猴子补丁吗?

前几天,一位同事向我指出了BCEL,从他的解释和快速阅读中我可以看出,这是一种在运行时修改字节码的方法。我的第一个想法是它听起来很危险,我的第二个想法是它听起来很酷。然后我想了想,想起了关于猴子补丁的编码恐怖帖子,并意识到这基本上是一回事。有没有人用过 BCEL 做任何实用的事情?我是对的,这基本上是运行时猴子补丁,还是我错过了什么?

0 投票
3 回答
2080 浏览

java - 从任意 .class 文件创建一个 BCEL JavaClass 对象

我在玩BCEL。我不是用它来生成字节码,而是试图检查现有编译类的结构。

我需要能够指向硬盘驱动器上任意位置的任意 .class 文件并基于该文件加载JavaClass对象。理想情况下,我想避免将给定的类添加到我的类路径中。

0 投票
1 回答
427 浏览

bcel - bcel 中的静态初始化器

在 BCEL 中,我想在类的静态初始化程序中初始化静态字段。但是,我还没有找到这样做的方法……有什么提示吗?

我需要类似的东西:

然而,我似乎只能生成(使用MethodGen)类似的东西:

这当然不一样。

0 投票
4 回答
2171 浏览

java - FindBugs 不接受 ANT 脚本中的 bcel.jar

我将 findbugs 安装到我的 ant lib 目录中,并将以下代码添加到我的主 ANT 脚本中:

在 init 目标中调用以下 xml:

在运行 ANT 脚本时,我得到的只是以下输出:

为什么 findbugs 不起作用?

0 投票
3 回答
3651 浏览

java - Ant loadproperties 失败(bcel 错误?)

我正在开发一个简单的构建脚本,它应该从 java 类文件中获取一些常量,并将它们用作我的文件名中的版本号。我使用 Eclipse 和它自己的 Ant,但将bcel-5.2.jar放在我的 libs 文件夹中并放入 Ant 调用的类路径中。

但不幸的是,蚂蚁任务loadproperties失败了:

之后,我尝试使用以下命令行从 Eclipse 外部运行 Ant:

结果是

我现在真的迷路了。是bcel错误吗?是否与我自己的 bcel 不兼容?

最后一个提示:从 Ant 目标中删除 bcel 类路径条目会导致:

UPDATE在 Eclipse 中设置 Ant 首选项后,错误消息发生了变化:

现在我认为这可能是Ant和BCEL之间的版本冲突。或者BCEL和JDK1.6。或者 Eclipse 和 BCEL 和 Ant 或 JDK……我迷路了。


回答:

这是在下面找到的评论

我应该提到这一点 - 你不需要转换任何东西。文档:“从 Ant 1.7 开始,字符编码 ISO-8859-1 用于将字符转换回字节,因此必须使用此编码来读取 java 类文件。” 这只是为了绕过字符过滤器用于原始字节这一事实的约定。ant.apache.org/manual/CoreTypes/... 使用 UTF-8 会很糟糕!——麦克道尔

0 投票
1 回答
207 浏览

java - 从Java中的行号找出方法名称?

给定行号、代码文件以及编译后的类文件(如果需要),获取周围方法签名的最优雅方法是什么(如果行号在方法中是偶数)?

要记住的事情:

  • 该行甚至可能不在方法中
  • 该行可能在内部或匿名类的方法中

在谷歌搜索时,我发现了这个重复的问题,所以我自己关闭它。

0 投票
1 回答
899 浏览

java - 字节码:LOOKUPSWITCH 和 TABLESWITCH

我目前正在使用 BCEL 检测字节码。在 BCEL API 中,两个指令类型LOOKUPSWITCHTABLESWITCH( package org.apache.bcel.generic) 是实现接口StackProducer。我知道这两条指令会弹出操作数堆栈(即消耗它)并且不会在堆栈上产生任何东西,那么它们如何实现StackProducer而不是StackConsumer呢?这是一个错误吗?谢谢

(ps:我试图在BCEL邮件列表上发布这个问题没有答案。我希望我能在这里找到更多的运气)

0 投票
2 回答
26996 浏览

java - 更改类加载器

我正在尝试在运行时切换类加载器:

和:

InjectingClassLoader是一个扩展org.apache.bcel.util.ClassLoader的类,它应该在询问它的父类之前加载类的修改版本)

我想让“方法 1”和“方法 2”的结果完全相同,但看起来thread.setContextClassLoader(classLoader)什么都不做,“方法 2”总是使用系统类加载器(可以通过比较来确定tcl 和 ccl 变量,同时调试)。

是否可以让新线程加载的所有类都使用给定的类加载器?

0 投票
1 回答
213 浏览

java - 在堆栈操作中出现奇怪的错误

作为我使用名为 JIST/SWANS 的工具运行的一些模拟的一部分,我遇到了一些奇怪的错误。这个模拟器是为 Java 1.4 编写的,我正在尝试将它移植到 1.5。

我要做的是用 1.5 SDK 编译原始代码。问题是模拟器使用bcel重写字节码,以便 JVM 可以用于模拟。当我在新的 SDK 下编译代码时,我得到下面给出的错误。有人可以指出我正确的方向来解决这个问题吗?我知道 1.4 和 1.5 生成的字节码有些不同,但我不知道从哪里开始寻找。

更新: 我从抛出异常的地方缩小到这一行:

类中有一个main方法正在传递给这个函数,所以我不知道它为什么返回一个null.

更新 2:

有一个功能:

它将 传递MyClient.class给在上面发布的方法中使用 this 的函数findMain。使用调试器,我可以看到declaredMethodsnull明显getDeclaredMethods调用正在消亡。该类MyClient通过以下方式定义为内部静态类:

我不确定这是否与declaredMethods存在有关,null所以我尝试将该类提取到一个单独的类中,但没有运气。

更新 3:

好的缩小范围。以下即使在主类中也会引发异常:

0 投票
1 回答
327 浏览

java - 动态字节码执行

好的,所以我正在尝试编写一个通用的字符串去混淆器(类似于 .NET 与 Simple Assembly Explorer 的功能)

我想要做的是通过 BCEL 获取方法的指令,并使用我提供的参数执行它们,并可以访问该方法的输出。这可能与任何现有的库有关吗?如果是这样,我可以得到一些帮助吗?

谢谢