当点击存在于我没有源的jar中的方法时,不会发生反编译.
我错过了什么?
我是Jadclipse插件的忠实粉丝,我真的很想升级到Eclipse 3.4,但插件目前无效.有没有其他程序可以让你使用jad来查看从Eclipse导航到的代码源?(在深入研究堆栈跟踪中的模糊代码时非常有用).
(相关问题:支持goto的Java编译器或JVM语言?)
我已经反编译了一个jar(法律上,出于调试目的)并想重新编译它.
例如
goto _L1
...
L1:
return true;
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法(或任何方式)来重新编译它?(除了手动重构和删除之外goto
)
考虑这个(恕我直言)简单的例子:
public class DecompilerTest {
public static void main(String[] args) {
Object s1 = "The", s2 = "answer";
doPrint((Object) "You should know:");
for (int i = 0; i < 2; i++) {
doPrint(s1);
doPrint(s2);
s1 = "is";
s2 = new Integer(42);
}
System.out.println();
}
private static void doPrint(String s1) {
System.out.print("Wrong!");
}
private static void doPrint(Object s1) {
System.out.print(s1 + " ");
}
}
Run Code Online (Sandbox Code Playgroud)
在没有调试信息的情况下用源/目标级别1.1编译它(即不应存在局部变量信息)并尝试对其进行反编译.我尝试过Jad,JD-GUI和Fernflower,他们都至少有一个错误的调用(即程序打印"错误!"至少一次)
真的没有java反编译器可以推断出正确的强制转换,以便它不会调用错误的重载吗?
编辑:目标级别1.1,以便不存在特定于Java6的快速验证信息.这可能会给反编译器一个线索,即s1已被声明为Object
而不是String
.即使没有这些信息,反编译器也应该能够反编译代码(不一定得到原始变量类型,但显示相同的行为),特别是因为许多混淆器也将它剥离.
反编译器出了什么问题:
(Object)
在第一次通话中错过了演员.s1
要String …
不Jadclipse
工作的Eclipse 3.6
?
我已经安装Jadclipse 3.3.0
在我Eclipse 3.6
复制的jar到插件目录,并重申蚀.
现在我在Windows-> Preferences下有了jadclipse菜单,但在尝试解编译任何类时,它根本就不会解编译.我得到通常的eclipse屏幕,说源不可用.错误日志中没有错误.
任何的想法?
我正在研究需要将.class文件反编译为源代码的java项目,我发现了很多方法,比如JAD反编译器和'javap -p'方法......但是我觉得这些方法都做不到以编程方式(请告诉是否可以),有没有办法以编程方式完成此操作,如果您向我展示任何库,将不胜感激.
我一直在提议我的工作场所通过以场景格式编写高级规范来实现行为驱动开发,并且可以想象为它编写测试.
我知道,对检验的规范工作趋于提高开发人员的生产力.我已经可以想到几个例子,我们自己的项目就是这种情况.
然而,很难向业务证明这一点的价值.
这是因为我们已经建立了联合应用程序开发(JAD)流程,开发人员,管理人员,用户体验和测试人员都聚在一起就一组共同的需求达成一致.
因此,他们问,开发人员为什么要反对测试人员创建的测试用例?这些是用于验证的,并且基于UX团队创建的更高级别的规范,开发人员目前正在开发这些规范.
他们说,这对开发人员来说已经足够了,而且无需改变规范的编写方式.
他们似乎有一点意义.
BDD/TDD的实际好处是什么,如果您已经有一个测试团队的测试用例与当前给开发人员的更高级别的规范完全兼容?
我对JAD很熟悉,并没有找到更新或更好的东西,但我真的看起来并不那么难,因为我之前有使用JAD工具的经验.但是,我可能错过了一些非常好的选择.我错过了什么好事吗?如果是这样,它与JAD相比有什么特点?
我正在使用Eclipse Helios版本,并将现有项目导入到IDE中。
该项目由Jar文件形式的一些代码组成
所以我已经安装了Jad Eclipse插件。
现在我的问题是来自IDE的。每当我单击jar文件(而不是java文件)中的类(Ctrl +鼠标)时,我都会得到这个
/*jadclipse*/
/*
DECOMPILATION REPORT
Decompiled from: C:\Documents and Settings\Sai\Desktop\work\kiuybon-1.1.jar
Total time: 0 ms
Jad reported messages/errors:
Exit status: 0
Caught exceptions:
java.io.IOException: Cannot run program "jad" (in directory "C:\Documents and Settings\Sai\.net.sf.jadclipse\1321168101468"): CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at net.sf.jadclipse.JadDecompiler.decompile(JadDecompiler.java:160)
at net.sf.jadclipse.JadDecompiler.decompileFromArchive(JadDecompiler.java:217)
at
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Java中的JAD反编译几个jar文件(我尝试使用JD-GUI,运气更差),但是我遇到了很多错误.一种类型(易于修复)似乎与内部类,但我也找到了这段代码:
static int[] $SWITCH_TABLE$atp$com$OrderType()
{
$SWITCH_TABLE$atp$com$OrderType;
if($SWITCH_TABLE$atp$com$OrderType == null) goto _L2; else goto _L1
_L1:
return;
_L2:
JVM INSTR pop ;
int ai[] = new int[OrderType.values().length];
try
{
ai[OrderType.LIMIT.ordinal()] = 2;
}
catch(NoSuchFieldError _ex) { }
try
{
ai[OrderType.MARKET.ordinal()] = 1;
}
catch(NoSuchFieldError _ex) { }
try
{
ai[OrderType.STOP.ordinal()] = 3;
}
catch(NoSuchFieldError _ex) { }
try
{
ai[OrderType.TAKE.ordinal()] = 4;
}
catch(NoSuchFieldError _ex) { }
return $SWITCH_TABLE$atp$com$OrderType = ai;
}
Run Code Online (Sandbox Code Playgroud)
使用如下:
switch($SWITCH_TABLE$atp$com$OrderType()[co.getOrderType().ordinal()])
{
case 1: // '\001'
order = …
Run Code Online (Sandbox Code Playgroud) 我好几次遇到过这个问题.每当我使用JD-GUI反编译并保存所有源时,它会在每行前面加上一个块注释,并在方法体中插入代码的行号.这是一个我刚刚反编译的jar的例子:
/* */ public void onEnable()
/* */ {
/* 25 */ List DropList = new ArrayList();
/* 26 */ DropList.add(Integer.valueOf(264));
/* 27 */ DropList.add(Integer.valueOf(57));
/* 28 */ DropList.add(Integer.valueOf(278));
/* */
/* 30 */ this.config = getConfig();
/* */
/* 32 */ this.config.addDefault("GiftDrops", DropList);
/* 33 */ this.config.addDefault("DropRate", Integer.valueOf(0));
/* 34 */ this.config.addDefault("GiftBoxPlayerSkin", "lol768");
/* 35 */ this.config.addDefault("CraftingRecipe.LineOne", "339,339,339");
/* 36 */ this.config.addDefault("CraftingRecipe.LineTwo", "339,264,339");
/* 37 */ this.config.addDefault("CraftingRecipe.LineThree", "339,339,339");
/* */
/* 39 */ this.config.options().copyDefaults(true);
/* 40 */ saveConfig();
/* …
Run Code Online (Sandbox Code Playgroud) 看来JAD插件没有使用最新的Eclipse.在Eclipse MarketPlace
我尝试安装它时搜索它后会显示一个错误框,其中包含错误详细信息
No repository found at http://feeling.sourceforge.net/update
Run Code Online (Sandbox Code Playgroud)
我在下面遇到了这个错误
Eclipse Java EE IDE for Web Developers.
Version: Mars.1 Release (4.5.1)
Build id: 20150924-1200
Spring Tool Suite
Version: 3.7.2.RELEASE
Build Id: 201511261048
Platform: Eclipse Mars.1 (4.5.1)
Run Code Online (Sandbox Code Playgroud) jad ×12
java ×8
decompiling ×5
eclipse ×4
decompiler ×2
bdd ×1
class ×1
eclipse-3.6 ×1
goto ×1
jadclipse ×1
jd-gui ×1
plugins ×1
recompile ×1
tdd ×1