【发布时间】: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