草庐IT

Bytecode

全部标签

java - 我如何在 [Java/Scala?] 代码中看到 Scala 编译器重写了原始 Scala 代码

在Scala邮件列表之后,不同的人经常说:“编译器将此[scala]代码重写为此[java/scala??]代码”。例如,从最新的线程之一,如果Scala看到classC(i:Int=4){...}然后编译器将其重写为(有效):classC(i:Int){...}objectC{definit$default$1:Int=4}我如何知道我的代码的编译器输出是什么?我应该为此反编译生成的字节码吗? 最佳答案 您可以使用“-print”作为编译器选项,scalac将删除所有Scala特定的功能。例如,这里是原始代码:classMain{

java - java字节码中的局部变量

我正在尝试学习Java字节码,我偶然发现了这个:我使用-g选项编译了这段非常简单的代码:publicclassTest{publicstaticvoidmain(Stringargs[]){doublea=1.0;intb=(int)a;}}主要代码原来是:0dconst_11dstore_12dload_13d2i4istore_35return另外,main的最大局部变量是4个,而LocalVariableTable只有3个条目(args,a,b)。我很想知道为什么编译器保留了4个局部变量,而显然只有3个,并且localvariable[2]没有被使用。有什么我想念的吗?谢谢

java - 检查 .class 文件中的内容

假设有人了解到某个开发人员将一堆用户名和密码硬编码到应用程序中,从而使其进入生产环境。哦哦..!您知道用户名和密码-有没有办法扫描字节码并确定用户名和密码是否实际上是硬编码的? 最佳答案 查看“.class”文件中使用的字符串字面值的一种简单方法是使用javapJDK安装中的实用程序使用“-v”选项转储文件。然后grep对于看起来像的文本其中...是您要查找的字符串。更新javap的最新文档是here,但旧版本在我看来更好看。 关于java-检查.class文件中的内容,我们在Stack

java - 什么样的 Java 代码需要堆栈映射框架?

我正在尝试为anissueaboutmissingstackmapframes的解决方法编写单元测试,但为此目的,我需要生成一个类,如果缺少堆栈图帧,该类将无法在Java8上进行验证。下面你可以看到我的测试用例(依赖项:ASM、Guava、JUnit)。它从GuineaPig类中删除堆栈映射帧,希望导致其字节码无法验证。我遇到问题的部分是在GuineaPig中使用需要堆栈映射帧的最少代码填充TODO,以便测试通过。importcom.google.common.io.*;importorg.junit.*;importorg.junit.rules.ExpectedException;

Java 6 - 注释处理器和代码添加

我编写了一个包含属性元数据和AnnotationProcessor的自定义注释:@SupportedAnnotationTypes({".Property"})publicclassPropertyProcessorextendsAbstractProcessor{@Overridepublicbooleanprocess(Setannotations,RoundEnvironmentroundEnv){//GetmessagerobjectMessagermessager=processingEnv.getMessager();//Iteratethroughtheannotatio

java - 为什么没有更多的 Java 软件被本地编译?

我意识到benefits字节码与native代码(可移植性)。但是假设您始终知道您的代码将在x86架构上运行,为什么不针对x86进行编译并获得性能优势呢?请注意,我假设本地代码编译会带来性能提升。有些人回答说实际上可能没有收获,这对我来说是个新闻...... 最佳答案 因为性能提升(如果有的话)不值得这么麻烦。此外,垃圾回收对性能非常重要。有可能JVM的GC比嵌入在编译后的可执行文件中的更好,比如GCJ。.而且即时编译甚至可以带来更好的性能,因为与编译器在编译时相比,JIT在运行时有更多信息可用于优化编译。请参阅JIT上的维基百科页

java字节码编辑器?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。什么是好的免费字节码编辑器?我想要一个编辑器,带有GUI的东西...我尝试了jbe-0.1b但没有成功(无法保存字节码更改)。

java - 使用 ASM 重写 Java 本地方法

我正在尝试通过使用ASM4.0重写类的字节码来做到这一点用非nativestub替换所有native方法。到目前为止我有这个:classClassAdapterextendsClassVisitor{publicClassAdapter(ClassVisitorcv){super(Opcodes.ASM4,cv);}@OverridepublicMethodVisitorvisitMethod(intaccess,Stringbase,Stringdesc,Stringsignature,String[]exceptions){returncv.visitMethod(access&~

java - 获取没有堆栈跟踪的 "ArrayIndexOutOfBoundsException: null"

在我们的日志文件中,我们发现以下内容:[2012-09-2400:09:32.590+0000UTC]ERRORhostserver1[][]somepackage.someclass[][Unknown][V3rAqPaDvvAAAAExEXhdWGyh][pjsQwTGHzxcAAAE5j4YdGvWV]"ThreadName"Someerrorhappened:java.lang.ArrayIndexOutOfBoundsException:null只有这一行,没有异常堆栈跟踪。发生此异常的tryblock正在执行使用javassist创建的动态生成的Java字节码。我想知道两件

java - 为什么Java代码需要编译而JavaScript代码不需要

为什么用Java编写的代码需要编译成由JVM解释的字节码,而用JavaScript等语言编写的代码不需要编译,可以直接在浏览器中运行?有没有简单的方法来理解这个?这两种语言的书写方式有什么根本区别,可能有助于理解这种行为?我不是CS学生,所以请原谅这个问题的幼稚。 最佳答案 从历史上看,JavaScript是一种解释型语言。这意味着解释器接受源代码并一步执行所有代码。这里的优点是简单和灵活,但解释器非常慢。编译器将高级语言转换为本地处理器或VM(在本例中为JavaVM)可以直接执行的低级语言。这要快得多。现代浏览器中的JavaScr