【问题标题】:Decompile using dependencies使用依赖反编译
【发布时间】:2019-05-29 04:08:38
【问题描述】:

我需要反编译的项目使用的 API 是代码的主要部分。我知道/有这个 API,有什么方法可以将它提供给反编译器,以便使用来自 API 的对象?

示例(使用 CFR 反编译器):

Player sender = cmd.getSender();
Player target = cmd.getTarget();
World world = cmd.getWorld();
world.teleport(sender, target);

变成:

Object obj1 = cmd.getSender();
Object obj2= cmd.getTarget();
Object obj3 = cmd.getWorld();
// cast must be added manually or error
(World) obj3.teleport(obj1, obj2);

考虑到变量的声明和使用可能相隔一百行,而一个方法可能使用多达 20 个不同的变量,这非常令人讨厌。我知道您无法对名称做任何事情,但知道类型会非常有帮助。

有没有办法解决这个问题? (我没有使用反编译器的经验,所以我可能很笨)

【问题讨论】:

  • 如果我不得不猜测,这可能是包含通用参数的原始目标方法(例如teleport)的问题,但是(1)调用站点被剥离了任何通用元数据;或者 (2) 在类路径中找不到调用目标,因此反编译器无法确定方法的真正泛型签名。或者,其中一个或两个可能已通过混淆器运行。没有原始的类文件,很难说。我的第一个建议是确保所有依赖项都在反编译器的类路径中。

标签: java bukkit decompiler


【解决方案1】:

没有任何反编译器可以始终无错误地进行反编译。有时它可以很好地反编译,有时则不行。最好的方法是拥有多个反编译器并相互使用它们以减少反编译源中的错误。
如果您使用 Eclipse,我建议您使用 plugin
或者你可以试试这个单独的工具Jar Explorer。有树反编译器。因此,您可以轻松地与任何人一起玩。

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多