Tag: 操作码

使用Java访问内存

我在内存中加载了一个程序。 现在我想直接访问内存并更改该程序内存中的OPCODE和DATA。 为此,我需要编写一个Java程序。 你能告诉我这是否可行? 如果是,请告诉我如何编写这样的程序。 提前致谢!

Java类文件上的ACC_SUPER访问标志的目的是什么?

invokespecial JVM指令用于在创建新对象时调用初始化方法( )。 该指令的描述建议(但不澄清)关于是否调用超类的构造函数或当前类的构造函数的决定取决于class文件中设置的ACC_SUPER标志的状态。 来自Sun JVM规范: 接下来,选择已解析的方法进行调用,除非满足以下所有条件: 为当前类设置ACC_SUPER标志(参见表4.1“类访问和属性修饰符”)。 – Source ( invokespecial opcode definition) ACC_SUPER标志的设置指示Java虚拟机要表达的其invokespecial指令的两个备选语义中的哪一个; 存在ACC_SUPER标志,以便向后兼容Sun的旧编译器为Java编程语言编译的代码。 Java虚拟机的所有新实现都应该实现本规范中记录的invokespecial的语义。 Java虚拟机指令集的所有新编译器都应设置ACC_SUPER标志。 Sun的旧编译器生成了Class_Sile标志,并且未设置ACC_SUPER。 Sun的旧Java虚拟机实现会在设置时忽略该标志。 – 来源 ( ClassFile格式) 该定义指出该标志是为了与旧编译器向后兼容。 然而,它继续与Sun’s older Java virtual machine implementations ignore the flag if it is set.相矛盾, Sun’s older Java virtual machine implementations ignore the flag if it is set. 该标志是否仍与invokespecial操作码一起使用? 从我所知,它似乎没有任何目的,我找不到建议它曾经做过的资源。 谢谢。

为什么JSR / RET不推荐使用Java字节码?

有谁知道为什么在Java 6中不推荐使用JSR / RET字节码对? 我在网上发现的唯一有意义的解释是,他们通过运行时进行代码分析更难以执行。 有谁知道另一个原因?