我使用的是java 7更新26。我有一个类,其中我有一个while循环。当我用jd-gui ()反编译那个.class文件时,它给了我一些奇怪的while循环。
try {
while (true) {
c = in.read();
if ((c >= '0' && c <= '9') || c == '-' || c == '+')
{
numBuf[len++] = (char) c;
} else if (c == '.' || c
大家好,
我正在尝试编译一个类文件,但因为有一些目录包含文件"a.java“,但也包含名为"a”的目录,因此出现错误
com\ImmutableProjectImportController.java:22: error: cannot find symbol
/* 22: */ import com.h.a.h.a.at;
^
symbol: class h
location: class a
当我删除文件夹a中的文件h.java时,该行没有错误。
有没有针对javac.exe的参数来解决这个问题?
我一直试图弄清楚Java优化的所有内容,并发现了一些有趣的东西。
第一种情况:原语类型编译时优化
public class Clazz {
public static void main(String args[]) {
final int i = 300;
new Clazz() {
void foo() {
System.out.println(i);
}
}.foo();
}
}
编译后(我使用jd-gui-0.3.5.windows来解压缩二进
我有以下java代码片段
while (condition1){
switch (someinteger){
case 1:
if(condition2) continue;
// other stuff here
break;
// other cases here
}
}
一切都很好。当我生成一个类文件,然后使用免费工具(JD-gui)对其进行反编译时,我得到了以下代码。
while (condition1){
switch (someinteger){
我知道这个问题已经被问了无数次了,但我特别想要一个能够正确处理枚举的反编译器(因为我正在反编译的jar大量使用枚举)。我测试了JAD和JD-GUI都不支持。
有没有人推荐一个反编译器(理想情况下,它可以在Linux下工作,可以轻松地处理整个jar,而不需要我编写shell脚本)?
编辑:具体地说,我在构造方面遇到了一些问题:
switch(myEnum) {
case A: ...
case B: ...
}
它们被反编译(对于JAD和JD-GUI),如下所示:
switch ($SWITCH_TABLE$com$MyType()[myEnum.ordinal()]) {
case 1:
ca
当我用IDA gui反转二进制文件时,所有函数都会被解压缩,而不会有任何问题。
但是当我在没有gui的ida上运行一个自动脚本时,总是有相同的功能,拒绝被解压缩。(当我打开自动化脚本所使用的同一个IDB时,函数就会被解压缩,而不会出现问题)
我正在使用bip。并使用BipFunc.can_decompile来检查一个函数是否可以被解压缩。
编辑:
根据下文的答复,我试图补充以下几点:
if not func.can_decompile:
print(f"can't decompile function 0x{func.ea:04x}, trying again"