草庐IT

Bytecode

全部标签

c++ - 任何 C/C++ 到非本地字节码编译器/解释器?

如标题所示,是否有任何C/C++字节码编译器/解释器?我正在用一种解释性语言编写一个应用程序,该应用程序依赖于某些完全可交叉编译的库(没有特殊标志来指示特定平台在编译期间的代码更改)但是是用C和C++编写的。与其将n-platform-specific-libs与每个平台一起发布,不如发布一组由一个平台特定的解释器解释的库。可能和/或可用?编辑1:所讨论的解释语言是Python,尽管我也可能使用Ruby。 最佳答案 您使用的是哪种解释性语言?如果它有一个基于.NET的实现(例如IronPython),您可以将它与C++/CLI编译器

Decompiled .class file, bytecode version: 52.0 (Java 8)解决办法参考

问题描述:今日如往常一样打开项目文件,却发现项目无法运行,文件只可读等问题(我这里是一个普通的java项目)即由于Decompiled.classfile,bytecodeversion:52.0(Java8)decompiled.classfilebytecodeversion:52.0(java8)  解决办法:可能是该项目文件在之前的运行过程中出了点问题,使得代码是从class文件反编译出来的,而不是查看的java源文件1.查看项目文件所在目录是否增加了其他文件比如我的项目TankGame所在目录新增了其他文件 2.直接用idea打开项目文件,而不是在上一级文件打开在上一级文件里面打开还

EVM 操作码(Opcode)与 字节码(Bytecode)

以太坊虚拟机(EVM)是一种基于栈的、准图灵完备(quasi-Turingcomplete)的虚拟机。EVM是智能合约的执行时环境,它是完全孤立的沙盒:运行在EVM中的代码无法访问网络、文件系统或其他进程。evm的交易可以看作是从一个帐户发送到另一个帐户的消息。它能包含一个二进制数据(合约payload)和以太币。如果目标账户含有代码,此代码会被执行,并以payload作为入参。如果目标账户是零账户(账户地址为 0 ),此交易将创建一个 新合约 。如前文所述,合约的地址不是零地址,而是通过合约创建者的地址和从该地址发出过的交易数量计算得到的(所谓的“nonce”)。这个用来创建合约的交易的pa

java - 幕后的 Groovy、Scala 和 Java

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭昨天。Improvethisquestion我使用Java大约6-7年,但几个月前我发现了Groovy并开始节省大量输入...然后我想知道如何某些事情在幕后工作(因为groovy性能真的很差)并且理解为给你动态类型每个Groovy对象都是一个MetaClass对象它处理所有JVM无法自行处理的事情。当然,这会在您编写的内容和执行的内容之间引入一个中间层,这会减慢一切。几天前,我开始了解有关Scala的一些信息。这两种语言在字节码翻译方面如何比较?它们

java - 检测 Scala 程序中函数变化的最佳实践?

我正在研究一种基于Scala的脚本语言(内部DSL),它允许用户在Scala脚本文件中定义多个数据转换函数。由于应用这些函数可能需要几个小时,所以我想将结果缓存在数据库中。允许用户更改转换函数的定义,也可以添加新函数。但是,然后用户使用稍微修改过的脚本重新启动应用程序我只想执行那些已更改或添加的功能。问题是如何检测这些变化?为简单起见,让我们假设用户只能调整脚本文件,以便可以假定对该脚本中未定义的任何内容的任何引用均未更改。在这种情况下,检测此类用户定义函数更改的最佳做法是什么?到现在为止我在想:根据函数定义的源代码解析脚本文件并计算指纹在运行时获取每个函数的字节码并根据这些数据构建指

java - 从 Java 字节码中删除指令

我一直在使用Javassist在加载类时动态操作类。虽然使用Javassist向方法添加代码相对容易,但我一直无法找到删除代码的方法。此时我正在通过使用nop指令替换目标操作码和任何参数来模拟代码的删除。但是,我认为这主要是一种黑客攻击:每个操作码都必须单独处理,因为参数的字节长度不同。在某些情况下,我还需要在nop和pop之间做出选择,具体取决于删除的操作码是否影响堆栈。这种操作开始变得乏味-并且执行它的代码也相应地变得复杂。因此,自然地,我希望有一个现有的解决方案。最终结果由nop指令填充。虽然JVM应该在不影响性能的情况下优化这些字节码,但生成的字节码仍然非常不优雅并且比它应该的

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

有谁知道为什么JSR/RET字节码对在Java6中被弃用?我在网上找到的唯一有意义的解释是,它们使运行时的代码分析变得更难执行且更慢。有谁知道另一个原因吗? 最佳答案 JSR和RET使字节码验证比其他方式困难得多,因为一些正常字节码约束的放宽(例如在进入JSR时具有一致的堆栈形状)。好处非常小(在某些情况下方法可能略小),并且validator在处理奇怪的JSR/RET模式(以及潜在的安全漏洞,以及完整验证的相关运行时成本)方面的持续困难使其成为一个无用的功能继续拥有。由于数据而启用的堆栈映射和轻量级validator在类加载期间取

java - 在运行时(动态地)创建简单的 POJO 类(字节码)

我有以下场景..我正在编写一些工具来对数据库运行用户输入的查询并返回结果..最简单的方法是将结果返回为:List但我需要更进一步。我需要(在运行时)创建一些具有某些名称的POJO(或DTO),并为其创建字段、setter和getter,并用返回的数据填充它,然后将其返回给用户其中有.class文件生成...所以这里的想法是如何在运行时(动态地)创建简单的类(字节码)我进行了基本搜索,发现了很多库includingApacheBCEL但我想我需要更简单的东西......你怎么看?谢谢。 最佳答案 如果使用CGLib,使用getter和

java - 是否有可能追踪到哪个表达式导致了 NPE?

当我得到一个NPE时,我会得到一个带有行号的堆栈跟踪。这很有用,但如果行非常密集和/或包含嵌套表达式,仍然不可能找出哪个引用为空。当然,此信息一定在某处可用。有办法解决这个问题吗?(如果不是java表达式,那么至少导致NPE的字节码指令也会有帮助)编辑#1:我看到一些评论建议打破这条线等等,这没有冒犯,实际上是非建设性和无关紧要的。如果我能那样做,我会的!只是说这种修改源代码是不可能的。编辑#2:apangin在下面发布了一个很好的答案,我接受了。但是对于不想自己尝试的人来说,我不得不在这里包含输出太酷了!;)假设我有这个驱动程序TestNPE.java1publicclassTest

Java:在运行时从同一 JVM 中获取类的字节码

相关:Isthereawaytoobtainthebytecodeforaclassatruntime?我正在为Clojure添加持久性,我终于准备好添加函数了。在Clojure中,函数被字节编译为具有调用方法(以及其他方法)的类。这样,功能是一流的。为了使这些持久化,我需要序列化和反序列化这些类。如何在无法访问.class文件的情况下获取类的字节码?如果我弄错了,请纠正我,但使用代理需要生成一个单独的VM,该代理连接到第一个VM。我需要从同一个VM执行此操作。仅仅使用Serializable来设置和获取Class对象是不够的。反序列化后,我需要加载该类,并且在后续的VM实例中,可能会