feat: rewrite try-catch processing

This commit is contained in:
Skylot
2021-08-10 13:07:05 +03:00
parent 12a66bd83e
commit 7c0671c81b
114 changed files with 2901 additions and 1810 deletions
@@ -108,12 +108,8 @@ public class JavaFileLoader {
private static int getNextUniqId() {
classUniqId++;
if (classUniqId >= 0xFFFF) {
resetDexUniqId();
classUniqId = 1;
}
return classUniqId;
}
public static void resetDexUniqId() {
classUniqId = 1;
}
}
@@ -189,23 +189,23 @@ public class JavaCodeReader implements ICodeReader {
}
private static CatchData convertSingleCatches(List<JavaSingleCatch> list) {
int allAddr = -1;
int allHandler = -1;
for (JavaSingleCatch singleCatch : list) {
if (singleCatch.getType() == null) {
allAddr = singleCatch.getHandler();
allHandler = singleCatch.getHandler();
list.remove(singleCatch);
break;
}
}
int len = list.size();
int[] addrs = new int[len];
int[] handlers = new int[len];
String[] types = new String[len];
for (int i = 0; i < len; i++) {
JavaSingleCatch singleCatch = list.get(i);
addrs[i] = singleCatch.getHandler();
handlers[i] = singleCatch.getHandler();
types[i] = singleCatch.getType();
}
return new CatchData(addrs, types, allAddr);
return new CatchData(handlers, types, allHandler);
}
private Set<Integer> getExcHandlers() {
@@ -2,16 +2,17 @@ package jadx.plugins.input.java.data.code.trycatch;
import jadx.api.plugins.input.data.ICatch;
import jadx.api.plugins.input.data.ITry;
import jadx.api.plugins.utils.Utils;
public class JavaTryData implements ITry {
private final int startAddr;
private final int endAddr;
private final int startOffset;
private final int endOffset;
private ICatch catchHandler;
public JavaTryData(int startAddr, int endAddr) {
this.startAddr = startAddr;
this.endAddr = endAddr;
public JavaTryData(int startOffset, int endOffset) {
this.startOffset = startOffset;
this.endOffset = endOffset;
}
@Override
@@ -24,18 +25,18 @@ public class JavaTryData implements ITry {
}
@Override
public int getStartAddress() {
return startAddr;
public int getStartOffset() {
return startOffset;
}
@Override
public int getEndAddress() {
return endAddr;
public int getEndOffset() {
return endOffset;
}
@Override
public int hashCode() {
return startAddr + 31 * endAddr;
return startOffset + 31 * endOffset;
}
@Override
@@ -47,11 +48,11 @@ public class JavaTryData implements ITry {
return false;
}
JavaTryData that = (JavaTryData) o;
return startAddr == that.startAddr && endAddr == that.endAddr;
return startOffset == that.startOffset && endOffset == that.endOffset;
}
@Override
public String toString() {
return "Try{" + startAddr + " - " + endAddr + ": " + catchHandler + '}';
return "Try{" + Utils.formatOffset(startOffset) + " - " + Utils.formatOffset(endOffset) + ": " + catchHandler + '}';
}
}