我正在尝试使用访问者 API 通过 ASM 6 实现一些类转换。我需要知道某个字段是否具有特定的访问标志。例如,字段可以是 ACC_PUBLIC + ACC_STATIC。在visitField方法中,访问标志是9。那么我如何知道该字段是否是静态的?
谢谢
我想列出一个方法调用的所有方法。
void create() throws MyException {
System.out.println("TEST");
of("String").map(String::valueOf).get();
}
Run Code Online (Sandbox Code Playgroud)
在这个方法中我想列出
我习惯了下面的代码,如何找到一个方法中调用的所有方法?
public class MethodFinder {
public static void main(String[] args) throws Throwable {
ClassPool cp = ClassPool.getDefault();
CtClass ctClass = cp.get("MyClass");
CtMethod method = ctClass.getDeclaredMethod("getItem1");
method.instrument(
new ExprEditor() {
public void edit(MethodCall m)
throws CannotCompileException
{
System.out.println(m.getClassName() + "." + m.getMethodName() + " " + m.getSignature());
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
并获取除 String::valueOf 之外的所有方法
是否可以通过任何其他框架解决这个问题并不重要。
是否可以在没有 Java 代理的情况下动态检测 Java 字节码?我之前使用 Java 代理检测过字节码,做了类似的事情:
ClassFileTransformer myTransformer = new Transformer();
instrument.addTransformer(myTransformer, true);
instrument.retransformClasses(classInstance);
instrument.removeTransformer(myTransformer);
Run Code Online (Sandbox Code Playgroud)
但是,如果不使用 Java 代理,这可能吗?我想要做的是调用一个方法,该方法将在 JVM 运行后的任何给定时间进行检测,而无需使用代理。
编译java文件时,它会生成.class文件.现在这个.class文件具有JVM解释的字节码.当我们在文本编辑器中打开.class文件时,它不是人类可读的.现在要查看字节码,可以使用像javap这样的反汇编程序.
我的问题是,为什么我们需要反汇编字节码才能查看字节码本身?
反汇编程序实际上做了什么,将.class文件转换为人类可读的格式?
dis当我注意到为模块生成的字节码时,我正在使用模块的Python字节码.给出一个名为的小测试模块mod.py:
if __name__ == "__main__":
print("Hello World")
Run Code Online (Sandbox Code Playgroud)
我用它为compile()函数创建了一个代码对象:
>>> cobj = compile(open("mod.py").read(), "mod", "exec")
Run Code Online (Sandbox Code Playgroud)
然后,反汇编代码对象以查看字节码:
>>> dis.dis(cobj)
1 0 LOAD_NAME 0 (__name__)
3 LOAD_CONST 0 ('__main__')
6 COMPARE_OP 2 (==)
9 POP_JUMP_IF_FALSE 22
2 12 LOAD_NAME 1 (print)
15 LOAD_CONST 1 ('Hello World')
18 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
21 POP_TOP
>> 22 LOAD_CONST 2 (None)
25 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
让我印象深刻的是最后两个命令LOAD_CONST和RETURN_VALUE,如果我的理解是正确的,将常None开值栈,因此返回.
模块是否隐式返回None,如果是,为什么?
字节码直接由python虚拟机执行还是转换为机器码由python虚拟机执行?
\npython 文档字节码状态如下\n \n这个 \xe2\x80\x9c 中间语言\xe2\x80\x9d 据说在执行与每个字节码对应的机器代码的虚拟机上运行。
\n我阅读了 stackoverflow 中与 PVM 相关的所有问题,字节码 python 代码执行的最后一部分没有被任何人解释清楚
\n以下 2 个流程中哪一个是正确的?
\n字节码由VM转换为机器码,VM执行机器码?CPU 做了什么,那么它是否空闲?
\n字节码由VM转换为机器码,VM将机器码发送给CPU执行?
\n哪个具有更大的字节码大小或在 Java 中相同?
if (a > b) a = b;
Run Code Online (Sandbox Code Playgroud)
对比
if (a > b) {
a = b;
}
Run Code Online (Sandbox Code Playgroud) 是否可以在java中创建自己的自定义类加载器.如果是那么请指导我.我想在类文件中进行更改而不是类混淆,这样就无法通过任何工具进行反转
bytecode ×9
java ×6
jvm ×2
python ×2
.class-file ×1
agent ×1
byte-buddy ×1
cglib ×1
classloader ×1
interpreter ×1
javacompiler ×1
javassist ×1
jvm-bytecode ×1
module ×1
python-2.7 ×1
python-3.x ×1