问题标签 [javap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
79 浏览

scala - 了解编译的 Scala 文件中的类型

鉴于:

通过 编译后sbt compile,我javap 'd 输出class文件:

为什么a会有类型,int

我已经指定了一种Int with Fooin object X

0 投票
1 回答
151 浏览

java - 在 Java 中使用协变返回类型时 javap 中的 Object.clone()

我正在阅读Java 中的协变返回类型。我写了以下代码:

一个父类:

一个子类:

我如何使用它:

如果在覆盖方法时可以返回子类型(如您所见,这就是我对clone()inSuper和所做的事情Sub),为什么我分别在运行and时看到Object.cloneinSuper和?Subjavap -p Super.classjavap -p Sub.class

结果javap -p Super.class

结果javap -p Sub.class

0 投票
2 回答
256 浏览

java - 在java中,我们可以使用javap反汇编器来探索一个java类、方法。如何在 C++ 中做同样的事情?

我是这个社区的新手,所以如果我在错误的部分提出这个问题违反了我们社区的任何条款和条件,那么我很抱歉。我一直在寻找上述问题的答案很长一段时间,但没有一个结果是相关的。

  • 我只想知道在java中我们可以通过使用javap来探索java类方法,如何在c++中做同样的事情???
  • 假设,我想查看 java 中 String 类的所有方法,我会使用 javap 来显示它的所有方法、它们的返回类型、它们的参数数量和它们的数据类型等。
  • 如何在 C++ 中做同样的事情???
  • 还有一种命令行方式来探索Java语言中特定包中的所有包和类吗???
  • 假设java** java.awt.*或任何此类方法都知道特定包中的所有包和类。
0 投票
1 回答
406 浏览

java - 错误的本地 StackMapTable

我在一个已经存在的类中使用 ASM 生成了一个简单的 getter 方法。

然后我生成了这个类。

现在,我可以通过 cw.toByteArray() 访问该类。问题是当我尝试加载类时出现错误,因为 StackMapTable 不正确(应该是,我正在使用 ClassWriter.COMPUTE_FRAMES ?)

错误

在此之后,我添加了一个 CheckClassAdapter 以查看问题所在。

输出如下。

如果我看一下我的方法 get_c() 我可以看到它有吗?在某些操作码中(可能是因为不理解第一个操作码?)

我现在真的不知道这意味着什么,但该方法看起来不像它应该的那样。我编译了一个简单的 Getter 类,方法如下所示。

我已经尝试将类版本设置为 50,因为 StackMapTable 尚未实现,但它似乎没有改变任何东西。我只是将ClassNode的版本变量设置为50。像这样。

这个类在 javap 中看起来像这样。

同样使用 javap 我可以获得我的方法,包括堆栈大小和本地编号,但该方法没有 StackMapTable(是的,我正在使用 -v,StackMapTable 显示在其他方法中)。

我的变量看起来像这样。

有人可以指出我需要做什么来修复该方法。我找不到任何有关如何使用 ASM 修复 StackMapTable 的有用信息。

0 投票
0 回答
723 浏览

java - 如何将字节码行号映射到源代码行号

我正在创建一个程序来在 java 中查找空指针取消引用。使用的方法是首先使用javap命令提取 java 字节码,然后从中提取控制流图 (CFG) 信息。从字节码中获得 CFG 后,我会对字节码进行分析以识别空分配和取消引用。如果存在从空赋值到取消引用的可能流程,我会指出这些路径。现在我遇到的问题是我将字节码中的这个空赋值和取消引用标识为字节码行号。但是显示字节码语句是没有用的。因此,我想将获得的行号映射到相应的源代码行号,以显示它被分配为空的位置。我如何让它发生?

注意:我知道比在字节码中识别它更容易在源代码中识别空赋值但是我从字节码开始以便于提取 CFG,现在我没有时间更改程序以从源代码进行分析。

0 投票
0 回答
256 浏览

java - Javap -l 没有显示我的局部变量表

出于某种原因,即使我使用 -l 选项,命令提示符也没有为我提供局部变量表。有什么建议/要点吗?

命令提示符为我输出的图像。

编辑,这里是 SumSqrt 类的代码:

}

0 投票
1 回答
159 浏览

java - 是否可以从反编译的代码中估计性能或圈复杂度?

假设我有两种算法的替代实现,或两种策略。我当然可以用 jmh 对它们进行基准测试。但是我可以通过查看反编译的字节码获得任何信息吗?

一个非常原生的例子是计算if_*复杂性aload_*的指令或内存消耗的指令。

0 投票
0 回答
616 浏览

java - javap不显示反编译类中的注释信息

我有一个带有简单 java 类的 jar,如下所示

使用 javap 反编译类后,注释信息未显示。

有人可以告诉我为什么反编译的类中缺少注释信息,即使@VisibleForTesting是类型的注释RetentionPolicy.CLASS

番石榴版-23.5-jre

我已经看过这个问题,但接受的答案似乎在这里无效。根据 Java 文档

RetentionPolicy.class - 注释将由编译器记录在类文件中,但不需要在运行时由 VM 保留。

所以 javap 也应该能够显示注释信息RetentionPolicy.CLASS

编辑

的输出javap -v

编辑 2

javap如果我使用一些 RUNTIME 保留策略(例如 -订阅),我仍然看不到注释

的输出javap

的输出javap -c

的输出javap -v

0 投票
0 回答
353 浏览

java - 在 IntelliJ 中查看 javap -c 输出

我想以命令javap -c输出的方式查看 Java 字节码,而不是像“查看字节码插件”那样。有没有办法做到这一点?

示例:此方法

转换为

使用该javap -c命令,但在 IntelliJ 的本机字节码查看器中,它看起来像这样:

哪个更复杂,更难阅读。我想查看第一个,而不必先编译整个项目并将其与.class文件混淆,然后javap -c仅在一个或两个类上执行。谢谢你的帮助。

0 投票
0 回答
498 浏览

java - 在所有文件上使用 java 程序中的 javap

我必须在java程序中实现javap -verbose,名为文件夹的目录有多个类,我想在所有类上使用这个javap -verbose,所以我这样做,

在我的java程序中但它不起作用(程序编译并运行但没有获得输出),但是当我这样做时

它运行(并获得输出)。另外,如果我这样做

在命令行上它可以工作。我正在使用最新版本的 Ubuntu。我如何在目录的所有文件上应用 javap。注意:文件夹没有子目录。