- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ASM字节码操作框架,用于对 Java 代码执行静态分析。我希望检测何时重新分配对象的字段,即何时发生这种代码:
class MyObject {
private int value;
void setValue(int newValue) { this.value = newValue; }
}
使用下面的代码(在实现ClassVisitor
的类中)可以检测到上述情况:
@Override
public void visitFieldInsn(int opcode, String owner, String name, String desc) {
if(opcode == Opcodes.PUTFIELD) {
// do whatever here
}
}
但是,无论拥有该字段的对象如何,都会调用此代码。我想找到在 this
对象上执行 PUTFIELD 操作的更具体的情况。例如,我想区分第一个代码片段和如下代码:
public MyObject createNewObjectWithDifferentField() {
MyObject newObject = new MyObject();
newObject.value = 43;
return newObject;
}
在上面的例子中,PUTFIELD 操作仍然被执行,但这里它是在局部变量 (newObject
) 而不是 this
对象上执行的。这将取决于分配时堆栈的状态,但我遇到了几个字节码完全不同的不同场景,我正在寻找处理这种复杂性的方法。
如何检查 PUTFIELD 是否正在重新分配属于 this
对象的字段?
编辑
我使用 ASM 仅执行分析,而不是检测现有字节码。如果可能的话,我最好找到一种无需更改字节码即可发现这一点的方法。
最佳答案
我认为一般情况下是不可能的。考虑:
class MyObject {
private int value;
void mymethod1() {
mymethod2(Math.random() > 0.5 ? this : new MyObject());
}
void mymethod2(MyObject that) {
that.value = 1;
}
}
在更简单的情况下,您可以将堆栈跟踪回 ALOAD 0
,它在实例方法中引用 this
。
关于java - 如何使用 ObjectWeb ASM 检查字节码操作 PUTFIELD 正在重新分配属于 'this' 对象的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3591415/
(原帖)将 hibernate 依赖项添加到 pom.xml 时显示错误 2011-10-11 10:36:53.710::WARN: failed guiceFilter java.lang.No
运行 swagger2 时出现以下异常。我在网上看到这通常是由于引用了同一个 jar 的多个不同版本。但是,我只在我的 gradle jar 文件夹中找到了 org.ow2.asm:asm:5.0.3
我正在尝试编译其他开发人员的开源自定义库。 我已经编译或找到依赖项,但无法在 gradle 中构建无法导入java的内部库包org.objectweb.asm 它是一个java内部库,所以它必须在to
目的:从java字节码文件中获取公共(public)方法签名(返回值、参数、方法名)。 我正在使用 ObjectWeb ASM 框架。 问题:我浏览了ASM的API规范并尝试了几个例子,但我仍然不知道
本文整理了Java中org.objectweb.howl.log.xa.XALogger类的一些代码示例,展示了XALogger类的具体用法。这些代码示例主要来源于Github/Stackoverfl
本文整理了Java中org.objectweb.howl.log.xa.XALogRecord类的一些代码示例,展示了XALogRecord类的具体用法。这些代码示例主要来源于Github/Stack
本文整理了Java中org.objectweb.howl.log.xa.XACommittingTx类的一些代码示例,展示了XACommittingTx类的具体用法。这些代码示例主要来源于Github
当我运行使用 hibernate 的 java 应用程序时,出现此错误: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter 我添加了
我正在尝试在 Eclipse 中运行一个使用 java RMI 的项目,但是当我运行它时,它给出了以下错误: java.rmi.ServerError: Error occurred in serve
已解决,此代码进行替换:https://gitlab.ow2.org/asm/asm/blob/master/asm/src/main/java/org/objectweb/asm/MethodWri
本文整理了Java中org.objectweb.howl.log.xa.XALogger.mark()方法的一些代码示例,展示了XALogger.mark()的具体用法。这些代码示例主要来源于Gith
本文整理了Java中org.objectweb.howl.log.xa.XALogger.init()方法的一些代码示例,展示了XALogger.init()的具体用法。这些代码示例主要来源于Gith
本文整理了Java中org.objectweb.howl.log.xa.XALogger.getStats()方法的一些代码示例,展示了XALogger.getStats()的具体用法。这些代码示例主
本文整理了Java中org.objectweb.howl.log.xa.XALogger.growActiveTxArray()方法的一些代码示例,展示了XALogger.growActiveTxAr
本文整理了Java中org.objectweb.howl.log.xa.XALogger.activeTxAdd()方法的一些代码示例,展示了XALogger.activeTxAdd()的具体用法。这
本文整理了Java中org.objectweb.howl.log.xa.XALogger.close()方法的一些代码示例,展示了XALogger.close()的具体用法。这些代码示例主要来源于Gi
本文整理了Java中org.objectweb.howl.log.xa.XALogger.getActiveMark()方法的一些代码示例,展示了XALogger.getActiveMark()的具体
本文整理了Java中org.objectweb.howl.log.xa.XALogger.onpWait()方法的一些代码示例,展示了XALogger.onpWait()的具体用法。这些代码示例主要来
本文整理了Java中org.objectweb.howl.log.xa.XALogger.put()方法的一些代码示例,展示了XALogger.put()的具体用法。这些代码示例主要来源于Github
本文整理了Java中org.objectweb.howl.log.xa.XALogger.putDone()方法的一些代码示例,展示了XALogger.putDone()的具体用法。这些代码示例主要来
我是一名优秀的程序员,十分优秀!