问题标签 [bytecode-manipulation]

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 投票
1 回答
1885 浏览

java - 我可以在我的源代码中插入字节码吗?

我可以在类的方法中编写字节码,以便编译器绕过该部分,因为它已经编译。类似于使用“asm”用 C 语言编写汇编程序的东西......

0 投票
1 回答
899 浏览

java - 字节码:LOOKUPSWITCH 和 TABLESWITCH

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

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

0 投票
3 回答
3987 浏览

java - Java 字节码操作库建议

我正在寻找一个维护良好且具有直观 API 的 Java 字节码操作库。那里似乎有很多。关于尝试哪些建议?

0 投票
5 回答
3059 浏览

java - 字节码操作模式

字节码操作有哪些合法用途,人们如何在实践中实现这些基于字节码操作的解决方案?

更新:我应该更清楚地说明这个问题实际上是关于人们使用什么模式和技术来借助字节码操作使他们的代码运行起来。

类似于已经提到的面向方面编程或动态构建代理对象和类似技术。

0 投票
7 回答
3186 浏览

java - 如何检测 Java 代理、JVMTI 等

在您无法控制的机器上运行时,如何保护 Java 环境?什么是阻止某人创建 java 代理或本机 JVMTI 代理并转储字节码或重写类以绕过许可和/或其他安全检查?有什么方法可以检测是否有任何代理从 Java 代码运行?来自 JNI?来自 JVMTI 代理?

0 投票
5 回答
127 浏览

java - 静态检查 Java 应用程序的链接错误

我有一个场景,我针对库的版本 1 编写了代码,但我想发布库的版本 2。代码已发货,因此不可更改。我担心它可能会尝试访问存在于 v1 中但已在 v2 中删除的类或库成员。

我想可以编写一个工具来做一个简单的检查,看看代码是否会链接到更新版本的库。我很欣赏即使代码链接,代码仍然可能非常破碎。我正在从另一边考虑这个问题——如果代码无法链接,那么我可以确定存在问题。

据我所知,我需要通过字节码检查引用、方法调用和对库类的字段访问,然后使用反射来检查类/成员是否存在。

我有三个问题:

(1)这样的工具是否已经存在?

(2)我有一种琐碎的感觉,它比我想象的要复杂得多,而且我错过了一些重要的事情——是这样吗?

(3)你知道一个方便的库,它可以让我检查字节码,以便我可以找到方法调用、引用等?

谢谢!

0 投票
4 回答
29924 浏览

java - 是否有 java 类文件/字节码编辑器来编辑指令?

是否有用于编辑 java 类文件的实用程序(或 eclipse 插件) ?我想在不重新编译它也没有完整的构建路径的情况下操作 java 类文件的字节码。

例如重命名方法、添加/删除指令、更改常量等。

我发现的唯一实用程序是:

  • classeditor 但它的功能非常有限(例如,无法重命名事物和操作指令)。

  • jbe不保存更改(可能是因为类验证失败 - 在我进行任何更改之前,尽管类运行完美)

    (jbe 最初有一个类路径问题,将类路径添加到 jbe.bat 文件有帮助)

0 投票
5 回答
80392 浏览

java - 是否可以查看 Class 文件的字节码?

可能重复:
是否有 java 类文件/字节码编辑器来编辑指令?

Java源代码被编译成字节码,实际上是在class文件中。是否可以查看已编译类的字节码?

如果可能,可以编辑吗?

是否有可用的 Eclipse 插件?

0 投票
1 回答
776 浏览

eclipse-plugin - 如何在构建时制作 Eclipse 仪器类?

有时我必须执行一些自定义字节码转换。我主要使用 asm 和 javaassit。

在 Eclipse 中,我通常使用 -javaagent jvm 参数运行我的代码。在 Eclipse 之外,我使用 maven、ant 或命令提示符在运行应用程序代码之前调用编织器。

但重点是:我想在构建时在 Eclipse 中执行检测。

  • 最好的方法是什么?
  • 是否有一个已经制作的插件可以通过实现一些 api 来连接?
  • 我可以用 eclipse 猴子编写这个脚本吗?
  • 我可以使用 ant builder 并用它调用我的 weaver 吗?
  • 我是否应该查看 AspectJ 插件(必须很大)并尝试弄清楚如何制作自己的插件?
  • 我应该看看其他插件来获得灵感吗?

谢谢。

0 投票
3 回答
1078 浏览

java - 如何检查字节码操作 PUTFIELD 是否正在使用 ObjectWeb ASM 重新分配属于“this”对象的字段?

我正在使用ASM字节码操作框架对 Java 代码执行静态分析。我希望检测何时重新分配对象的字段,即何时发生这种代码:

使用以下代码(在实现的类中ClassVisitor)可以检测到上述情况:

但是,无论拥有该字段的对象如何,都会调用此代码。我想找到在this对象上执行 PUTFIELD 操作的更具体的情况。例如,我想区分第一个代码片段和如下代码:

在上述情况下,仍然执行 PUTFIELD 操作,但这里它是针对局部变量 ( newObject) 而不是this对象。这将取决于分配时堆栈的状态,但我遇到了一些字节码完全不同的不同场景,我正在寻找处理这种复杂性的方法。

如何检查 PUTFIELD 是否正在重新分配属于this对象的字段?


编辑

我使用 ASM 仅执行分析,而不是检测现有字节码。如果可能的话,最好我想找到一种在不改变字节码的情况下发现这一点的方法。