bytecode-manipulation相关内容

Java 字节码操作库建议

我正在寻找一个维护良好且具有直观 API 的 Java 字节码操作库.那里似乎有很多.有什么可以尝试的建议吗? 解决方案 您的问题的最佳答案将取决于您的具体需求和目标;如果您可以扩展您想要完成的工作,我或许可以提供更量身定制的回复. 然而,根据我的经验,ASM 可能是成熟度的最佳组合,灵活性和易用性: 它处于相对积极的开发阶段:尽管最新版本是 2009 年 6 月发布的,但开发 ..
发布时间:2022-01-16 20:09:05 Java开发

ASM 中的 Java 方法参数值

我正在尝试获取 Java 程序方法参数的值.我正在使用 ASM 来检测字节码并获取这些值.但是,我遇到了一些麻烦. 这是用于检测代码的 visitCode() 方法.它正在做的是: 创建一个空数组来存储收集到的参数. 对于每个参数,将其值加载到数组中. 将此数组发送到我的代理的 OnMethodEntry 方法(将在其中使用值). . @Override公共无效访问代码() ..
发布时间:2022-01-16 12:40:36 Java开发

是否可以更改 Lua 字节码中的字符串(内容和大小)以使其仍然正确?

是否可以更改 Lua 字节码中的字符串(内容和大小)以使其仍然正确?它是关于在 Lua 字节码中翻译字符串.当然,并非每种语言的每个单词的大小都相同... 解决方案 是的,前提是您知道自己在做什么.字符串以其存储为 int 的大小作为前缀.该 int 的大小和字节序取决于平台.但是为什么要编辑字节码呢?你失去了来源吗? ..
发布时间:2021-12-30 20:31:11 其他开发

在二进制文件中间插入字节

我想在图像元数据块的中间添加一些字符串.在一些特定的标记下.由于 .NET 不支持自定义元数据字段,因此我必须在字节级别执行此操作. 块的构建方式类似于 1C 02 XX YY YY ZZ ZZ ZZ ... 其中 XX 是我需要附加的字段的 ID,YY YY 是它的大小,ZZ = 数据. 我想应该或多或少有可能读取到此标记(1C 02 XX)的所有图像数据,然后增加大小字节(YY Y ..
发布时间:2021-11-18 04:16:47 C#/.NET

使用 OSGi 时是否可以进行字节码操作?

我正在制作一个应用服务器,我需要在其中使用一些字节码操作(例如插入自定义equals 和 hashCode 方法到用 @Entity 注释的类).现在我给 JVM 一个 Java 代理(-javaagent 选项)它使用 ASM 进行字节码转换. 我一直在考虑使用 OSGi,但我不知道它是否允许我进行必要的字节码操作. 在使用 OSGi 时是否可以进行字节码操作?怎么样? bundl ..
发布时间:2021-11-11 04:35:15 Java开发

向 Java 类添加编程注释

使用示例: 我想在类字段上添加自定义注释 @MyContainer,然后在所有这些字段上自动添加相关的 Hibernate 注释(取决于字段类型和属性). 此外,我需要向类添加 JAXB XmlType 注释,并将类型名称基于类名称. 我还想根据他们的类型等向字段添加注释.所有添加的注释都应该在运行时可用(因此休眠/JAXB 可以找到它们). 我知道以下选项: 预处理类源(错误选项) ..

字节码注入发生在哪里?

动机 我有一个 SomeObject.java 文件: class SomeObject {字符串名称;} 编译它会创建一个包含字节码的 SomeObject.class 文件. 0xCAFEBABE... 如果我们在 JVM 上使用 SomeObject,它会被当前的类加载器加载并且一切正常. 现在让我们假设我想要一些动态代码生成.我可以编写我的自定义注释 @Target( ..

主动向方法添加 Java 注释?

有没有办法修改 .class 文件以便向某些方法添加 Java 注释?基本上我想遍历 jar 文件中每个类文件的方法并注释某些方法.请注意,这不是在使用 jar 文件时的运行时.相反,在我完成后,我想用注释修改类文件. 我确实可以访问源代码,所以如果有一个自动源代码修改器,那也能正常工作... 我假设我需要一个工具,例如 Javassist 或 ASM.如果是这样,我应该使用哪个,我将 ..

如何从 SBT 运行 DataNucleus 字节码增强器?

我已经整理了一个概念证明,旨在提供一个骨架 SBT 多模块项目,该项目利用 DataNucleus JDO Enhancer 和混合 Java 和 Scala 源. 当我尝试从 SBT 增强持久性类时出现了困难.显然,当从 SBT 调用 Fork.java.fork(...) 时,我没有传递正确的类路径. 另见这个问题: SBT 如何从模型类生成元模型类使用数据核? 线程“main ..
发布时间:2021-07-15 19:00:12 Java开发

Java字节码操作和Java反射API?

我最近遇到了“字节码操作"这个词(是什么让我研究了这个,偶然地我看到了字节码提供者,同时看到了使用 Hibernate 的应用程序中的日志).我也知道(有点)Java Reflection API. 这两个概念相似吗?它们之间有什么区别?什么时候使用哪个? 解决方案 反射 API 允许您访问有关已加载到 JVM 的类的成员(字段、方法、接口等)的信息.这个 API 不允许修改类的行为 ..
发布时间:2021-07-06 18:40:22 Java开发

将代理附加到现有对象?

我的计划是编写一个基于注解的缓存框架来缓存方法的返回值.当第一次使用特定参数调用方法时,缓存应存储方法的返回值.当使用相同参数第二次调用同一方法时,该方法应从缓存中返回先前计算的结果,并且不再执行其代码.我的注释如下所示: @Cached(cacheProvider = HashMapCacheProvider.class)公共产品 getProduct(String productId){// ..
发布时间:2021-06-22 20:34:52 Java开发

如何使用ByteBuddy创建动态代理

在Java中,可以使用 InvocationHandler 的实现来创建动态代理.尽管JVM进行了优化,但使用反射总是会产生调用方法的一些开销. 为尝试解决此问题,我尝试使用ByteBuddy在运行时创建代理类,但是文档在这方面似乎不够清楚. 如何创建 MethodCallProxy 以便将方法调用转发到某些类实例? 编辑: 为了更好地阐明我的问题,我提供了一个我要实现的示 ..
发布时间:2021-05-18 20:35:24 Java开发

如何在Scala的Class [_]实例中添加SerialVersionUID?

我需要创建一个 java.lang.Class 的实例,该实例与 classOf [MyClass] ,但是还有一个 SerialVersionUID ,而 MyClass 没有。 MyClass 是Scala-2.10类。一个问题是,在Java SerialVersionUID 中是静态最终版本,而在Scala中, SerialVersionUID ,因为Scala没有静态变量。 如果 M ..

识别``方法代码太大''的来源

所以我遇到了 MY:警告无法转换类XYZ java.lang.RuntimeException:方法代码太大! $。 code> 我知道方法代码太大!使用ASM 和链接到的项目的异常。 > 但是,已经为我提供了ASM的修改版本,因此可以使用该项目。 那将需要我手动分解违规方法。值得庆幸的是,这恰好发生在一个类库中(到目前为止-.-),因此它应该是可管理的 ..

是否有用于加载对象(不是常量)的visitLdcInsn类似物?

我们用Java语言编写了一个简单的PostScript解释器,并希望通过直接为源代码的特定部分生成字节码来对其进行优化。为此,我们需要从Java字节码上下文的上下文中加载对象。在生成的字节码方法的签名中指定这样的对象是不好的,因为在我们的例子中它们可能数量很大。 在Java Asm中,我们有方法 public void visitLdcInsn(Object cst) 它访问一个 ..
发布时间:2020-09-25 07:37:06 Java开发

结合多个java方法字节码序列

我想知道是否可以将多个java方法字节码序列组合为一个方法。假设我们有一个方法A,它调用了另外两个方法B1和B2。 字节码序列: ..... invokevirtual B1 iload .. .... invokevirtual B2 .... 在运行时,B1和B2可能紧密相关,我们希望将B1字节码和B2字节码以及“ invokevirtul B ..
发布时间:2020-09-25 07:33:40 其他开发