使用Krakatau将Java字节码重组为.class文件时出错

时间:2017-11-11 03:37:46

标签: java jvm bytecode .class-file

我正在尝试使用Krakatau来组装使用CREATE PROCEDURE [dbo].[GetNewKey] ( @KeyId bigint output ) AS BEGIN SET NOCOUNT ON; IF NOT EXISTS(SELECT * FROM PoolKeys) BEGIN EXEC GenerateNewKeys END DECLARE @res TABLE(KeyId bigint); ;WITH T AS (SELECT TOP(1) * FROM PoolKeys ORDER BY [Rank] ) DELETE FROM T OUTPUT deleted.KeyId INTO @res SELECT TOP (1) @KeyId=KeyId FROM @res END 获取的本机Java字节码,但我收到了一个奇怪的错误:

javap -c

我已经检查了项目的GitHub存储库中的所有内容,但似乎没有任何帮助。当我使用汇编程序时,它是如何期待.class文件的?我的字节码应该采用某种形式的Jasmin语法吗?

2 个答案:

答案 0 :(得分:1)

Krakatau文档中没有任何内容表明它旨在转换javap -c的输出。

如果您想使用Krakatau转换字节码文件,您应该使用Krakatau进行反汇编步骤而不是javap -c

Krakatua README.txt文件解释了如何执行此操作。

答案 1 :(得分:1)

javap的输出无法重新组合。它旨在帮助Java程序员调试他们的代码,并且不完整或机器可读。

Krakatau使用基于Jasmin语法的汇编格式。 Krakatau包含汇编程序和反汇编程序,因此您可以使用Krakatau反汇编程序将类文件反汇编为文本汇编文件,然后将其重新组合为类文件。

在旁注中,javap缺少许多功能并隐藏输出中的内容。它对于快速检查很有用,但是如果你真的想要查看低级别的类文件中的内容,那么无论如何都需要使用Krakatau。