bytecode-manipulation相关内容
我正在寻找一个维护良好且具有直观 API 的 Java 字节码操作库.那里似乎有很多.有什么可以尝试的建议吗? 解决方案 您的问题的最佳答案将取决于您的具体需求和目标;如果您可以扩展您想要完成的工作,我或许可以提供更量身定制的回复. 然而,根据我的经验,ASM 可能是成熟度的最佳组合,灵活性和易用性: 它处于相对积极的开发阶段:尽管最新版本是 2009 年 6 月发布的,但开发
..
我正在尝试获取 Java 程序方法参数的值.我正在使用 ASM 来检测字节码并获取这些值.但是,我遇到了一些麻烦. 这是用于检测代码的 visitCode() 方法.它正在做的是: 创建一个空数组来存储收集到的参数. 对于每个参数,将其值加载到数组中. 将此数组发送到我的代理的 OnMethodEntry 方法(将在其中使用值). . @Override公共无效访问代码()
..
是否可以更改 Lua 字节码中的字符串(内容和大小)以使其仍然正确?它是关于在 Lua 字节码中翻译字符串.当然,并非每种语言的每个单词的大小都相同... 解决方案 是的,前提是您知道自己在做什么.字符串以其存储为 int 的大小作为前缀.该 int 的大小和字节序取决于平台.但是为什么要编辑字节码呢?你失去了来源吗?
..
我想在图像元数据块的中间添加一些字符串.在一些特定的标记下.由于 .NET 不支持自定义元数据字段,因此我必须在字节级别执行此操作. 块的构建方式类似于 1C 02 XX YY YY ZZ ZZ ZZ ... 其中 XX 是我需要附加的字段的 ID,YY YY 是它的大小,ZZ = 数据. 我想应该或多或少有可能读取到此标记(1C 02 XX)的所有图像数据,然后增加大小字节(YY Y
..
我正在制作一个应用服务器,我需要在其中使用一些字节码操作(例如插入自定义equals 和 hashCode 方法到用 @Entity 注释的类).现在我给 JVM 一个 Java 代理(-javaagent 选项)它使用 ASM 进行字节码转换. 我一直在考虑使用 OSGi,但我不知道它是否允许我进行必要的字节码操作. 在使用 OSGi 时是否可以进行字节码操作?怎么样? bundl
..
使用示例: 我想在类字段上添加自定义注释 @MyContainer,然后在所有这些字段上自动添加相关的 Hibernate 注释(取决于字段类型和属性). 此外,我需要向类添加 JAXB XmlType 注释,并将类型名称基于类名称. 我还想根据他们的类型等向字段添加注释.所有添加的注释都应该在运行时可用(因此休眠/JAXB 可以找到它们). 我知道以下选项: 预处理类源(错误选项)
..
动机 我有一个 SomeObject.java 文件: class SomeObject {字符串名称;} 编译它会创建一个包含字节码的 SomeObject.class 文件. 0xCAFEBABE... 如果我们在 JVM 上使用 SomeObject,它会被当前的类加载器加载并且一切正常. 现在让我们假设我想要一些动态代码生成.我可以编写我的自定义注释 @Target(
..
有没有办法修改 .class 文件以便向某些方法添加 Java 注释?基本上我想遍历 jar 文件中每个类文件的方法并注释某些方法.请注意,这不是在使用 jar 文件时的运行时.相反,在我完成后,我想用注释修改类文件. 我确实可以访问源代码,所以如果有一个自动源代码修改器,那也能正常工作... 我假设我需要一个工具,例如 Javassist 或 ASM.如果是这样,我应该使用哪个,我将
..
我已经整理了一个概念证明,旨在提供一个骨架 SBT 多模块项目,该项目利用 DataNucleus JDO Enhancer 和混合 Java 和 Scala 源. 当我尝试从 SBT 增强持久性类时出现了困难.显然,当从 SBT 调用 Fork.java.fork(...) 时,我没有传递正确的类路径. 另见这个问题: SBT 如何从模型类生成元模型类使用数据核? 线程“main
..
我最近遇到了“字节码操作"这个词(是什么让我研究了这个,偶然地我看到了字节码提供者,同时看到了使用 Hibernate 的应用程序中的日志).我也知道(有点)Java Reflection API. 这两个概念相似吗?它们之间有什么区别?什么时候使用哪个? 解决方案 反射 API 允许您访问有关已加载到 JVM 的类的成员(字段、方法、接口等)的信息.这个 API 不允许修改类的行为
..
我的计划是编写一个基于注解的缓存框架来缓存方法的返回值.当第一次使用特定参数调用方法时,缓存应存储方法的返回值.当使用相同参数第二次调用同一方法时,该方法应从缓存中返回先前计算的结果,并且不再执行其代码.我的注释如下所示: @Cached(cacheProvider = HashMapCacheProvider.class)公共产品 getProduct(String productId){//
..
我有一个项目,我使用 Javassist 记录传出的方法/构造函数调用,代码如下: CtMethod cm = ... ;厘米.仪器(新的表达式编辑器(){公共无效编辑(MethodCall m)抛出无法编译异常{if (m.getClassName().equals("Point")&&m.getMethodName().equals("move"))m.replace("{ $1 = 0;
..
在Java中,可以使用 InvocationHandler 的实现来创建动态代理.尽管JVM进行了优化,但使用反射总是会产生调用方法的一些开销. 为尝试解决此问题,我尝试使用ByteBuddy在运行时创建代理类,但是文档在这方面似乎不够清楚. 如何创建 MethodCallProxy 以便将方法调用转发到某些类实例? 编辑: 为了更好地阐明我的问题,我提供了一个我要实现的示
..
我一直在尝试通过ASM中的跳转来了解堆栈映射框架在Java中的工作方式.我创建了一个简单的方法来尝试一些操作:(用Krakatau分解): L0:ldc'hello'L2:astore_1L3:getstatic字段java/lang/System out Ljava/io/PrintStream;L6:新的java/lang/StringBuilderL9:dupL10:invokespec
..
我有一个像这样的类结构: package com.mydomain.myproject;公共课外{内部公共类{//一些代码}} 现在,我可以使用以下方法获取内部类的 CtClass : ClassPool pool = ClassPool.getDefault();CtClass innerCt = pool.getCtClass("com.mydomain.myproject.Out
..
我们知道有人说Java JIT比C ++快. 我有一些利用JIT并在运行时代码中删除一些指令的想法. 这是我尝试过的示例代码: /** * Created by kadirbasol on 4/6/14. */ public class RemoveJump { public final boolean test; private static RemoveJum
..
我需要创建一个 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的修改版本,因此可以使用该项目。 那将需要我手动分解违规方法。值得庆幸的是,这恰好发生在一个类库中(到目前为止-.-),因此它应该是可管理的
..
我们用Java语言编写了一个简单的PostScript解释器,并希望通过直接为源代码的特定部分生成字节码来对其进行优化。为此,我们需要从Java字节码上下文的上下文中加载对象。在生成的字节码方法的签名中指定这样的对象是不好的,因为在我们的例子中它们可能数量很大。 在Java Asm中,我们有方法 public void visitLdcInsn(Object cst) 它访问一个
..
我想知道是否可以将多个java方法字节码序列组合为一个方法。假设我们有一个方法A,它调用了另外两个方法B1和B2。 字节码序列: ..... invokevirtual B1 iload .. .... invokevirtual B2 .... 在运行时,B1和B2可能紧密相关,我们希望将B1字节码和B2字节码以及“ invokevirtul B
..