Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jadx
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
open-source
jadx
Commits
d3c2496f
Commit
d3c2496f
authored
Mar 22, 2013
by
Skylot
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Code clean up
parent
baa14e9d
Show whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
96 additions
and
160 deletions
+96
-160
JadxArgs.java
src/main/java/jadx/JadxArgs.java
+1
-1
ProcessClass.java
src/main/java/jadx/ProcessClass.java
+1
-1
ClassGen.java
src/main/java/jadx/codegen/ClassGen.java
+0
-5
CodeWriter.java
src/main/java/jadx/codegen/CodeWriter.java
+5
-6
InsnGen.java
src/main/java/jadx/codegen/InsnGen.java
+1
-1
MethodGen.java
src/main/java/jadx/codegen/MethodGen.java
+1
-1
RegionGen.java
src/main/java/jadx/codegen/RegionGen.java
+1
-1
LocalVarInfo.java
src/main/java/jadx/dex/info/LocalVarInfo.java
+0
-6
InsnDecoder.java
src/main/java/jadx/dex/instructions/InsnDecoder.java
+10
-20
TypedVar.java
src/main/java/jadx/dex/instructions/args/TypedVar.java
+3
-3
BlockNode.java
src/main/java/jadx/dex/nodes/BlockNode.java
+3
-5
ClassNode.java
src/main/java/jadx/dex/nodes/ClassNode.java
+1
-1
DexNode.java
src/main/java/jadx/dex/nodes/DexNode.java
+1
-1
InsnNode.java
src/main/java/jadx/dex/nodes/InsnNode.java
+1
-0
MethodNode.java
src/main/java/jadx/dex/nodes/MethodNode.java
+12
-11
RootNode.java
src/main/java/jadx/dex/nodes/RootNode.java
+1
-1
AnnotationsParser.java
src/main/java/jadx/dex/nodes/parser/AnnotationsParser.java
+0
-6
DebugInfoParser.java
src/main/java/jadx/dex/nodes/parser/DebugInfoParser.java
+14
-14
BlockMakerVisitor.java
src/main/java/jadx/dex/visitors/BlockMakerVisitor.java
+13
-13
CodeShrinker.java
src/main/java/jadx/dex/visitors/CodeShrinker.java
+3
-3
EnumVisitor.java
src/main/java/jadx/dex/visitors/EnumVisitor.java
+1
-1
ModVisitor.java
src/main/java/jadx/dex/visitors/ModVisitor.java
+1
-1
MarkTryCatchRegions.java
...n/java/jadx/dex/visitors/regions/MarkTryCatchRegions.java
+2
-2
PostRegionVisitor.java
...ain/java/jadx/dex/visitors/regions/PostRegionVisitor.java
+1
-6
ProcessVariables.java
...main/java/jadx/dex/visitors/regions/ProcessVariables.java
+1
-1
RegionMaker.java
src/main/java/jadx/dex/visitors/regions/RegionMaker.java
+2
-2
RegionStack.java
src/main/java/jadx/dex/visitors/regions/RegionStack.java
+2
-2
CheckTypeVisitor.java
...dx/dex/visitors/typeresolver/finish/CheckTypeVisitor.java
+0
-5
BlockUtils.java
src/main/java/jadx/utils/BlockUtils.java
+0
-13
ErrorsCounter.java
src/main/java/jadx/utils/ErrorsCounter.java
+2
-2
Utils.java
src/main/java/jadx/utils/Utils.java
+0
-14
InputFile.java
src/main/java/jadx/utils/files/InputFile.java
+1
-1
TestFields.java
src/samples/java/jadx/samples/TestFields.java
+7
-7
TypeMergeTest.java
src/test/java/jadx/tests/TypeMergeTest.java
+4
-3
No files found.
src/main/java/jadx/JadxArgs.java
View file @
d3c2496f
...
...
@@ -19,7 +19,7 @@ import com.beust.jcommander.ParameterDescription;
import
com.beust.jcommander.ParameterException
;
public
class
JadxArgs
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
JadxArgs
.
class
);
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
JadxArgs
.
class
);
@Parameter
(
description
=
"<input files> (.dex, .apk, .jar or .class)"
,
required
=
true
)
protected
List
<
String
>
files
;
...
...
src/main/java/jadx/ProcessClass.java
View file @
d3c2496f
...
...
@@ -11,7 +11,7 @@ import org.slf4j.Logger;
import
org.slf4j.LoggerFactory
;
class
ProcessClass
implements
Runnable
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
ProcessClass
.
class
);
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
ProcessClass
.
class
);
private
final
ClassNode
cls
;
private
final
List
<
IDexTreeVisitor
>
passes
;
...
...
src/main/java/jadx/codegen/ClassGen.java
View file @
d3c2496f
...
...
@@ -24,14 +24,9 @@ import java.util.Iterator;
import
java.util.List
;
import
java.util.Set
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.android.dx.rop.code.AccessFlags
;
public
class
ClassGen
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
ClassGen
.
class
);
private
final
ClassNode
cls
;
private
final
ClassGen
parentGen
;
private
final
AnnotationGen
annotationGen
;
...
...
src/main/java/jadx/codegen/CodeWriter.java
View file @
d3c2496f
...
...
@@ -3,18 +3,17 @@ package jadx.codegen;
import
jadx.utils.exceptions.JadxRuntimeException
;
import
java.io.File
;
import
java.io.FileNotFoundException
;
import
java.io.PrintWriter
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
public
class
CodeWriter
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
CodeWriter
.
class
);
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
CodeWriter
.
class
);
private
static
final
int
MAX_FILENAME_LENGTH
=
128
;
public
final
static
String
NL
=
System
.
getProperty
(
"line.separator"
);
public
final
static
String
INDENT
=
"\t"
;
public
static
final
String
NL
=
System
.
getProperty
(
"line.separator"
);
public
static
final
String
INDENT
=
"\t"
;
private
StringBuilder
buf
=
new
StringBuilder
();
private
String
indentStr
;
...
...
@@ -155,11 +154,11 @@ public class CodeWriter {
PrintWriter
out
=
null
;
try
{
makeDirsForFile
(
file
);
out
=
new
PrintWriter
(
file
);
out
=
new
PrintWriter
(
file
,
"UTF-8"
);
String
code
=
buf
.
toString
();
code
=
removeFirstEmptyLine
(
code
);
out
.
print
(
code
);
}
catch
(
FileNotFound
Exception
e
)
{
}
catch
(
Exception
e
)
{
LOG
.
error
(
"Save file error"
,
e
);
}
finally
{
if
(
out
!=
null
)
...
...
src/main/java/jadx/codegen/InsnGen.java
View file @
d3c2496f
...
...
@@ -33,7 +33,7 @@ import org.slf4j.Logger;
import
org.slf4j.LoggerFactory
;
public
class
InsnGen
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
InsnGen
.
class
);
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
InsnGen
.
class
);
protected
final
MethodGen
mgen
;
protected
final
MethodNode
mth
;
...
...
src/main/java/jadx/codegen/MethodGen.java
View file @
d3c2496f
...
...
@@ -34,7 +34,7 @@ import org.slf4j.LoggerFactory;
import
com.android.dx.rop.code.AccessFlags
;
public
class
MethodGen
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
MethodGen
.
class
);
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
MethodGen
.
class
);
private
final
MethodNode
mth
;
private
final
Set
<
String
>
mthArgsDecls
;
...
...
src/main/java/jadx/codegen/RegionGen.java
View file @
d3c2496f
...
...
@@ -35,7 +35,7 @@ import org.slf4j.Logger;
import
org.slf4j.LoggerFactory
;
public
class
RegionGen
extends
InsnGen
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
RegionGen
.
class
);
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
RegionGen
.
class
);
public
RegionGen
(
MethodGen
mgen
,
MethodNode
mth
)
{
super
(
mgen
,
mth
,
false
);
...
...
src/main/java/jadx/dex/info/LocalVarInfo.java
View file @
d3c2496f
...
...
@@ -5,12 +5,8 @@ import jadx.dex.instructions.args.RegisterArg;
import
jadx.dex.instructions.args.TypedVar
;
import
jadx.dex.nodes.DexNode
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
public
class
LocalVarInfo
extends
RegisterArg
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
LocalVarInfo
.
class
);
private
boolean
isEnd
;
public
LocalVarInfo
(
DexNode
dex
,
int
rn
,
int
nameId
,
int
typeId
,
int
signId
)
{
...
...
@@ -31,8 +27,6 @@ public class LocalVarInfo extends RegisterArg {
TypedVar
tv
=
new
TypedVar
(
type
);
tv
.
setName
(
name
);
setTypedVar
(
tv
);
// LOG.trace("local var: {}, sign: {}", tv, sign);
}
public
void
start
(
int
addr
,
int
line
)
{
...
...
src/main/java/jadx/dex/instructions/InsnDecoder.java
View file @
d3c2496f
...
...
@@ -10,9 +10,6 @@ import jadx.dex.nodes.InsnNode;
import
jadx.dex.nodes.MethodNode
;
import
jadx.utils.exceptions.DecodeException
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.android.dx.io.Code
;
import
com.android.dx.io.OpcodeInfo
;
import
com.android.dx.io.Opcodes
;
...
...
@@ -23,8 +20,6 @@ import com.android.dx.io.instructions.SparseSwitchPayloadDecodedInstruction;
public
class
InsnDecoder
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
InsnDecoder
.
class
);
private
final
MethodNode
method
;
private
final
DecodedInstruction
[]
insnArr
;
private
final
DexNode
dex
;
...
...
@@ -35,11 +30,10 @@ public class InsnDecoder {
this
.
insnArr
=
DecodedInstruction
.
decodeAll
(
mthCode
.
getInstructions
());
}
public
InsnNode
[]
run
()
{
public
InsnNode
[]
run
()
throws
DecodeException
{
InsnNode
[]
instructions
=
new
InsnNode
[
insnArr
.
length
];
for
(
int
i
=
0
;
i
<
insnArr
.
length
;
i
++)
{
try
{
DecodedInstruction
rawInsn
=
insnArr
[
i
];
if
(
rawInsn
!=
null
)
{
InsnNode
insn
=
decode
(
rawInsn
,
i
);
...
...
@@ -51,10 +45,6 @@ public class InsnDecoder {
}
else
{
instructions
[
i
]
=
null
;
}
}
catch
(
DecodeException
e
)
{
LOG
.
error
(
"Instruction decode error"
,
e
);
System
.
exit
(
1
);
}
}
return
instructions
;
}
...
...
src/main/java/jadx/dex/instructions/args/TypedVar.java
View file @
d3c2496f
...
...
@@ -20,9 +20,9 @@ public class TypedVar {
/**
* This method must be used very carefully
*/
public
boolean
forceSetType
(
ArgType
t
ype
)
{
if
(
type
!=
null
&&
!
type
.
equals
(
t
ype
))
{
t
his
.
type
=
t
ype
;
public
boolean
forceSetType
(
ArgType
newT
ype
)
{
if
(
newType
!=
null
&&
!
type
.
equals
(
newT
ype
))
{
t
ype
=
newT
ype
;
return
true
;
}
else
{
return
false
;
...
...
src/main/java/jadx/dex/nodes/BlockNode.java
View file @
d3c2496f
...
...
@@ -13,6 +13,7 @@ import java.util.List;
public
class
BlockNode
extends
AttrNode
implements
IBlock
{
private
int
id
;
private
final
int
startOffset
;
private
final
List
<
InsnNode
>
instructions
=
new
ArrayList
<
InsnNode
>(
2
);
...
...
@@ -26,12 +27,9 @@ public class BlockNode extends AttrNode implements IBlock {
private
BlockRegState
startState
;
private
BlockRegState
endState
;
private
int
id
;
public
static
int
initialID
;
public
BlockNode
(
MethodNode
mth
,
int
offset
)
{
public
BlockNode
(
MethodNode
mth
,
int
id
,
int
offset
)
{
this
.
id
=
id
;
this
.
startOffset
=
offset
;
this
.
id
=
++
initialID
;
}
public
void
setId
(
int
id
)
{
...
...
src/main/java/jadx/dex/nodes/ClassNode.java
View file @
d3c2496f
...
...
@@ -32,7 +32,7 @@ import com.android.dx.io.ClassDef;
public
class
ClassNode
extends
AttrNode
implements
ILoadable
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
ClassNode
.
class
);
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
ClassNode
.
class
);
private
final
DexNode
dex
;
private
final
ClassInfo
clsInfo
;
...
...
src/main/java/jadx/dex/nodes/DexNode.java
View file @
d3c2496f
...
...
@@ -23,7 +23,7 @@ import com.android.dx.merge.TypeList;
public
class
DexNode
{
public
final
static
int
NO_INDEX
=
-
1
;
public
static
final
int
NO_INDEX
=
-
1
;
private
final
RootNode
root
;
private
final
DexBuffer
dexBuf
;
...
...
src/main/java/jadx/dex/nodes/InsnNode.java
View file @
d3c2496f
...
...
@@ -148,6 +148,7 @@ public class InsnNode extends AttrNode {
@Override
public
boolean
equals
(
Object
obj
)
{
if
(
this
==
obj
)
return
true
;
if
(
obj
==
null
)
return
false
;
if
(
hashCode
()
!=
obj
.
hashCode
())
return
false
;
if
(!(
obj
instanceof
InsnNode
))
return
false
;
...
...
src/main/java/jadx/dex/nodes/MethodNode.java
View file @
d3c2496f
...
...
@@ -8,6 +8,7 @@ import jadx.dex.info.AccessInfo.AFType;
import
jadx.dex.info.ClassInfo
;
import
jadx.dex.info.MethodInfo
;
import
jadx.dex.instructions.GotoNode
;
import
jadx.dex.instructions.IfNode
;
import
jadx.dex.instructions.InsnDecoder
;
import
jadx.dex.instructions.SwitchNode
;
import
jadx.dex.instructions.args.ArgType
;
...
...
@@ -27,9 +28,6 @@ import java.util.HashSet;
import
java.util.List
;
import
java.util.Set
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.android.dx.io.ClassData.Method
;
import
com.android.dx.io.Code
;
import
com.android.dx.io.Code.CatchHandler
;
...
...
@@ -37,8 +35,6 @@ import com.android.dx.io.Code.Try;
public
class
MethodNode
extends
AttrNode
implements
ILoadable
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
MethodNode
.
class
);
private
final
MethodInfo
mthInfo
;
private
final
ClassNode
parentClass
;
private
final
AccessInfo
accFlags
;
...
...
@@ -259,23 +255,24 @@ public class MethodNode extends AttrNode implements ILoadable {
case
SWITCH:
{
SwitchNode
sw
=
(
SwitchNode
)
insn
;
for
(
int
target
:
sw
.
getTargets
())
{
insnByOffset
[
target
].
getAttributes
().
add
(
new
JumpAttribute
(
offset
,
target
)
);
addJump
(
insnByOffset
,
offset
,
target
);
}
// default case
int
next
=
InsnDecoder
.
getNextInsnOffset
(
insnByOffset
,
offset
);
if
(
next
!=
-
1
)
insnByOffset
[
next
].
getAttributes
().
add
(
new
JumpAttribute
(
offset
,
next
)
);
addJump
(
insnByOffset
,
offset
,
next
);
break
;
}
case
IF:
int
next
=
InsnDecoder
.
getNextInsnOffset
(
insnByOffset
,
offset
);
if
(
next
!=
-
1
)
insnByOffset
[
next
].
getAttributes
().
add
(
new
JumpAttribute
(
offset
,
next
));
// no break
addJump
(
insnByOffset
,
offset
,
next
);
addJump
(
insnByOffset
,
offset
,
((
IfNode
)
insn
).
getTarget
());
break
;
case
GOTO:
int
target
=
((
GotoNode
)
insn
).
getTarget
();
insnByOffset
[
target
].
getAttributes
().
add
(
new
JumpAttribute
(
offset
,
target
));
addJump
(
insnByOffset
,
offset
,
((
GotoNode
)
insn
).
getTarget
());
break
;
default
:
...
...
@@ -284,6 +281,10 @@ public class MethodNode extends AttrNode implements ILoadable {
}
}
private
static
void
addJump
(
InsnNode
[]
insnByOffset
,
int
offset
,
int
target
)
{
insnByOffset
[
target
].
getAttributes
().
add
(
new
JumpAttribute
(
offset
,
target
));
}
public
String
getName
()
{
String
name
=
mthInfo
.
getName
();
if
(
name
.
equals
(
parentClass
.
getShortName
()))
...
...
src/main/java/jadx/dex/nodes/RootNode.java
View file @
d3c2496f
...
...
@@ -16,7 +16,7 @@ import org.slf4j.Logger;
import
org.slf4j.LoggerFactory
;
public
class
RootNode
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
RootNode
.
class
);
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
RootNode
.
class
);
private
final
JadxArgs
jadxArgs
;
...
...
src/main/java/jadx/dex/nodes/parser/AnnotationsParser.java
View file @
d3c2496f
...
...
@@ -15,15 +15,10 @@ import java.util.HashMap;
import
java.util.List
;
import
java.util.Map
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.android.dx.io.DexBuffer.Section
;
public
class
AnnotationsParser
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
AnnotationsParser
.
class
);
private
final
DexNode
dex
;
public
AnnotationsParser
(
ClassNode
cls
,
int
offset
)
throws
DecodeException
{
...
...
@@ -74,7 +69,6 @@ public class AnnotationsParser {
Section
anSection
=
dex
.
openSection
(
section
.
readInt
());
Annotation
a
=
readAnnotation
(
dex
,
anSection
,
true
);
list
.
add
(
a
);
// LOG.debug(" + " + a);
}
return
new
AnnotationsList
(
list
);
}
...
...
src/main/java/jadx/dex/nodes/parser/DebugInfoParser.java
View file @
d3c2496f
...
...
@@ -14,20 +14,20 @@ import com.android.dx.io.DexBuffer.Section;
public
class
DebugInfoParser
{
private
final
static
int
DBG_END_SEQUENCE
=
0x00
;
private
final
static
int
DBG_ADVANCE_PC
=
0x01
;
private
final
static
int
DBG_ADVANCE_LINE
=
0x02
;
private
final
static
int
DBG_START_LOCAL
=
0x03
;
private
final
static
int
DBG_START_LOCAL_EXTENDED
=
0x04
;
private
final
static
int
DBG_END_LOCAL
=
0x05
;
private
final
static
int
DBG_RESTART_LOCAL
=
0x06
;
private
final
static
int
DBG_SET_PROLOGUE_END
=
0x07
;
private
final
static
int
DBG_SET_EPILOGUE_BEGIN
=
0x08
;
private
final
static
int
DBG_SET_FILE
=
0x09
;
private
final
static
int
DBG_FIRST_SPECIAL
=
0x0a
;
// the smallest special opcode
private
final
static
int
DBG_LINE_BASE
=
-
4
;
// the smallest line number increment
private
final
static
int
DBG_LINE_RANGE
=
15
;
// the number of line increments represented
private
static
final
int
DBG_END_SEQUENCE
=
0x00
;
private
static
final
int
DBG_ADVANCE_PC
=
0x01
;
private
static
final
int
DBG_ADVANCE_LINE
=
0x02
;
private
static
final
int
DBG_START_LOCAL
=
0x03
;
private
static
final
int
DBG_START_LOCAL_EXTENDED
=
0x04
;
private
static
final
int
DBG_END_LOCAL
=
0x05
;
private
static
final
int
DBG_RESTART_LOCAL
=
0x06
;
private
static
final
int
DBG_SET_PROLOGUE_END
=
0x07
;
private
static
final
int
DBG_SET_EPILOGUE_BEGIN
=
0x08
;
private
static
final
int
DBG_SET_FILE
=
0x09
;
private
static
final
int
DBG_FIRST_SPECIAL
=
0x0a
;
// the smallest special opcode
private
static
final
int
DBG_LINE_BASE
=
-
4
;
// the smallest line number increment
private
static
final
int
DBG_LINE_RANGE
=
15
;
// the number of line increments represented
private
final
MethodNode
mth
;
private
final
Section
section
;
...
...
src/main/java/jadx/dex/visitors/BlockMakerVisitor.java
View file @
d3c2496f
...
...
@@ -26,26 +26,30 @@ import java.util.List;
import
java.util.Map
;
import
java.util.Set
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
public
class
BlockMakerVisitor
extends
AbstractVisitor
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
BlockMakerVisitor
.
class
);
// leave these instructions alone in block node
private
final
static
Set
<
InsnType
>
separateInsns
=
EnumSet
.
of
(
private
static
final
Set
<
InsnType
>
separateInsns
=
EnumSet
.
of
(
InsnType
.
IF
,
InsnType
.
SWITCH
,
InsnType
.
MONITOR_ENTER
,
InsnType
.
MONITOR_EXIT
);
private
static
int
nextBlockId
;
@Override
public
void
visit
(
MethodNode
mth
)
{
if
(
mth
.
isNoCode
())
return
;
mth
.
initBasicBlocks
();
BlockNode
.
initialID
=
0
;
makeBasicBlocks
(
mth
);
BlockProcessingHelper
.
visit
(
mth
);
mth
.
finishBasicBlocks
();
}
private
static
void
makeBasicBlocks
(
MethodNode
mth
)
{
nextBlockId
=
0
;
InsnNode
prevInsn
=
null
;
Map
<
Integer
,
BlockNode
>
blocksMap
=
new
HashMap
<
Integer
,
BlockNode
>();
...
...
@@ -179,10 +183,6 @@ public class BlockMakerVisitor extends AbstractVisitor {
if
(
i
>
100
)
throw
new
AssertionError
(
"Can't fix method cfg: "
+
mth
);
}
BlockProcessingHelper
.
visit
(
mth
);
mth
.
finishBasicBlocks
();
}
private
static
BlockNode
getBlock
(
MethodNode
mth
,
int
offset
,
Map
<
Integer
,
BlockNode
>
blocksMap
)
{
...
...
@@ -204,7 +204,7 @@ public class BlockMakerVisitor extends AbstractVisitor {
}
private
static
BlockNode
startNewBlock
(
MethodNode
mth
,
int
offset
)
{
BlockNode
block
=
new
BlockNode
(
mth
,
offset
);
BlockNode
block
=
new
BlockNode
(
mth
,
++
nextBlockId
,
offset
);
mth
.
getBasicBlocks
().
add
(
block
);
return
block
;
}
...
...
@@ -337,7 +337,7 @@ public class BlockMakerVisitor extends AbstractVisitor {
}
}
// splice return block
// splice return block
if several precessors presents
if
(
block
.
getAttributes
().
contains
(
AttributeFlag
.
RETURN
)
&&
block
.
getPredecessors
().
size
()
>
1
&&
!
block
.
getInstructions
().
get
(
0
).
getAttributes
().
contains
(
AttributeType
.
CATCH_BLOCK
))
{
...
...
@@ -377,7 +377,7 @@ public class BlockMakerVisitor extends AbstractVisitor {
return
false
;
}
private
void
cleanDomTree
(
MethodNode
mth
)
{
private
static
void
cleanDomTree
(
MethodNode
mth
)
{
for
(
BlockNode
block
:
mth
.
getBasicBlocks
())
{
AttributesList
attrs
=
block
.
getAttributes
();
attrs
.
remove
(
AttributeType
.
LOOP
);
...
...
src/main/java/jadx/dex/visitors/CodeShrinker.java
View file @
d3c2496f
...
...
@@ -23,7 +23,7 @@ import org.slf4j.LoggerFactory;
public
class
CodeShrinker
extends
AbstractVisitor
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
CodeShrinker
.
class
);
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
CodeShrinker
.
class
);
@Override
public
void
visit
(
MethodNode
mth
)
{
...
...
@@ -186,12 +186,12 @@ public class CodeShrinker extends AbstractVisitor {
rarg
.
wrapInstruction
(
ai
);
}
// remove method args
if
(
list
.
size
()
!=
0
&
args
.
size
()
!=
0
)
{
if
(
list
.
size
()
!=
0
&
&
args
.
size
()
!=
0
)
{
list
.
removeAll
(
args
);
}
i
++;
if
(
i
>
10000
)
throw
new
JadxRuntimeException
(
"Can't inline arguments for: "
+
arg
+
" insn:"
+
assignInsn
);
throw
new
JadxRuntimeException
(
"Can't inline arguments for: "
+
arg
+
" insn:
"
+
assignInsn
);
}
while
(!
list
.
isEmpty
());
return
arg
.
wrapInstruction
(
assignInsn
);
...
...
src/main/java/jadx/dex/visitors/EnumVisitor.java
View file @
d3c2496f
...
...
@@ -104,7 +104,7 @@ public class EnumVisitor extends AbstractVisitor {
continue
;
RegisterArg
nameArg
=
(
RegisterArg
)
insn
.
getArg
(
0
);
InsnArg
pos
=
insn
.
getArg
(
1
);
//
InsnArg pos = insn.getArg(1);
// TODO add check: pos == j
String
name
=
(
String
)
nameArg
.
getConstValue
();
...
...
src/main/java/jadx/dex/visitors/ModVisitor.java
View file @
d3c2496f
...
...
@@ -32,7 +32,7 @@ import org.slf4j.LoggerFactory;
* (remove, replace, process exception handlers)
*/
public
class
ModVisitor
extends
AbstractVisitor
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
ModVisitor
.
class
);
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
ModVisitor
.
class
);
@Override
public
void
visit
(
MethodNode
mth
)
{
...
...
src/main/java/jadx/dex/visitors/regions/MarkTryCatchRegions.java
View file @
d3c2496f
...
...
@@ -27,8 +27,8 @@ import org.slf4j.LoggerFactory;
* Extract blocks to separate try/catch region
*/
public
class
MarkTryCatchRegions
extends
AbstractRegionVisitor
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
MarkTryCatchRegions
.
class
);
private
final
static
boolean
DEBUG
=
false
;
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
MarkTryCatchRegions
.
class
);
private
static
final
boolean
DEBUG
=
false
;
static
{
if
(
DEBUG
)
...
...
src/main/java/jadx/dex/visitors/regions/PostRegionVisitor.java
View file @
d3c2496f
...
...
@@ -12,11 +12,7 @@ import jadx.utils.exceptions.JadxException;
import
java.util.List
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
public
class
PostRegionVisitor
extends
AbstractVisitor
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
PostRegionVisitor
.
class
);
@Override
public
void
visit
(
MethodNode
mth
)
throws
JadxException
{
...
...
@@ -24,10 +20,9 @@ public class PostRegionVisitor extends AbstractVisitor {
return
;
DepthRegionTraverser
.
traverse
(
mth
,
new
MarkTryCatchRegions
(
mth
),
mth
.
getRegion
());
DepthRegionTraverser
.
traverse
(
mth
,
new
FinishRegions
(),
mth
.
getRegion
());
//
removeReturn(mth);
removeReturn
(
mth
);
}
/**
...
...
src/main/java/jadx/dex/visitors/regions/ProcessVariables.java
View file @
d3c2496f
...
...
@@ -25,7 +25,7 @@ import org.slf4j.Logger;
import
org.slf4j.LoggerFactory
;
public
class
ProcessVariables
extends
AbstractVisitor
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
ProcessVariables
.
class
);
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
ProcessVariables
.
class
);
private
static
class
Usage
{
private
RegisterArg
arg
;
...
...
src/main/java/jadx/dex/visitors/regions/RegionMaker.java
View file @
d3c2496f
...
...
@@ -38,7 +38,7 @@ import org.slf4j.Logger;
import
org.slf4j.LoggerFactory
;
public
class
RegionMaker
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
RegionMaker
.
class
);
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
RegionMaker
.
class
);
private
final
MethodNode
mth
;
...
...
@@ -247,7 +247,7 @@ public class RegionMaker {
return
out
;
}
private
final
static
Set
<
BlockNode
>
cacheSet
=
new
HashSet
<
BlockNode
>();
private
static
final
Set
<
BlockNode
>
cacheSet
=
new
HashSet
<
BlockNode
>();
private
BlockNode
processMonitorEnter
(
IRegion
curRegion
,
BlockNode
block
,
InsnNode
insn
,
RegionStack
stack
)
{
RegisterArg
arg
=
(
RegisterArg
)
insn
.
getArg
(
0
);
...
...
src/main/java/jadx/dex/visitors/regions/RegionStack.java
View file @
d3c2496f
...
...
@@ -12,8 +12,8 @@ import org.slf4j.Logger;
import
org.slf4j.LoggerFactory
;
public
class
RegionStack
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
RegionStack
.
class
);
private
final
static
boolean
DEBUG
=
false
;
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
RegionStack
.
class
);
private
static
final
boolean
DEBUG
=
false
;
static
{
if
(
DEBUG
)
...
...
src/main/java/jadx/dex/visitors/typeresolver/finish/CheckTypeVisitor.java
View file @
d3c2496f
...
...
@@ -5,11 +5,7 @@ import jadx.dex.nodes.InsnNode;
import
jadx.dex.nodes.MethodNode
;
import
jadx.utils.ErrorsCounter
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
public
class
CheckTypeVisitor
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
CheckTypeVisitor
.
class
);
public
static
void
visit
(
MethodNode
mth
,
InsnNode
insn
)
{
if
(
insn
.
getResult
()
!=
null
)
{
...
...
@@ -28,7 +24,6 @@ public class CheckTypeVisitor {
}
private
static
void
error
(
String
msg
,
MethodNode
mth
,
InsnNode
insn
)
{
// LOG.warn(msg + ": " + insn + " " + insn.getMethod());
ErrorsCounter
.
methodError
(
mth
,
msg
+
": "
+
insn
);
}
}
src/main/java/jadx/utils/BlockUtils.java
View file @
d3c2496f
...
...
@@ -166,19 +166,6 @@ public class BlockUtils {
return
false
;
}
private
static
boolean
addPredcessorsUntil
(
Set
<
BlockNode
>
set
,
BlockNode
from
,
BlockNode
until
)
{
set
.
add
(
from
);
for
(
BlockNode
pred
:
from
.
getPredecessors
())
{
if
(
pred
==
until
)
return
true
;
if
(
pred
!=
until
&&
!
set
.
contains
(
pred
))
{
if
(
addPredcessorsUntil
(
set
,
pred
,
until
))
return
true
;
}
}
return
false
;
}
public
static
boolean
isPathExists
(
BlockNode
start
,
BlockNode
end
)
{
if
(
start
==
end
)
return
true
;
...
...
src/main/java/jadx/utils/ErrorsCounter.java
View file @
d3c2496f
...
...
@@ -12,9 +12,9 @@ import org.slf4j.Logger;
import
org.slf4j.LoggerFactory
;
public
class
ErrorsCounter
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
ErrorsCounter
.
class
);
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
ErrorsCounter
.
class
);
private
final
static
Set
<
Object
>
errorNodes
=
new
HashSet
<
Object
>();
private
static
final
Set
<
Object
>
errorNodes
=
new
HashSet
<
Object
>();
private
static
int
errorsCount
=
0
;
public
static
int
getErrorCount
()
{
...
...
src/main/java/jadx/utils/Utils.java
View file @
d3c2496f
package
jadx
.
utils
;
import
java.io.File
;
import
java.io.PrintWriter
;
import
java.io.StringWriter
;
import
java.util.Iterator
;
...
...
@@ -39,19 +38,6 @@ public class Utils {
return
str
.
toString
();
}
public
static
boolean
deleteFolder
(
File
dir
)
{
File
[]
files
=
dir
.
listFiles
();
if
(
files
!=
null
)
{
for
(
File
f
:
files
)
{
if
(
f
.
isDirectory
())
deleteFolder
(
f
);
else
f
.
delete
();
}
}
return
dir
.
delete
();
}
public
static
String
getStackTrace
(
Throwable
throwable
)
{
StringWriter
sw
=
new
StringWriter
();
PrintWriter
pw
=
new
PrintWriter
(
sw
,
true
);
...
...
src/main/java/jadx/utils/files/InputFile.java
View file @
d3c2496f
...
...
@@ -16,7 +16,7 @@ import org.slf4j.LoggerFactory;
import
com.android.dx.io.DexBuffer
;
public
class
InputFile
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
InputFile
.
class
);
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
InputFile
.
class
);
private
final
File
file
;
private
final
DexBuffer
dexBuf
;
...
...
src/samples/java/jadx/samples/TestFields.java
View file @
d3c2496f
...
...
@@ -4,15 +4,15 @@ import java.util.Arrays;
public
class
TestFields
extends
AbstractTest
{
private
final
static
boolean
fbz
=
false
;
private
final
static
boolean
fb
=
true
;
private
final
static
int
fi
=
5
;
private
final
static
int
fiz
=
0
;
private
static
final
boolean
fbz
=
false
;
private
static
final
boolean
fb
=
true
;
private
static
final
int
fi
=
5
;
private
static
final
int
fiz
=
0
;
private
final
static
String
fstr
=
"final string"
;
private
static
final
String
fstr
=
"final string"
;
private
final
static
double
fd
=
3.14
;
private
final
static
double
[]
fda
=
new
double
[]
{
3.14
,
2.7
};
private
static
final
double
fd
=
3.14
;
private
static
final
double
[]
fda
=
new
double
[]
{
3.14
,
2.7
};
private
static
int
si
=
5
;
...
...
src/test/java/jadx/tests/TypeMergeTest.java
View file @
d3c2496f
...
...
@@ -62,11 +62,12 @@ public class TypeMergeTest extends TestCase {
private
void
merge
(
ArgType
t1
,
ArgType
t2
,
ArgType
exp
)
{
ArgType
res
=
ArgType
.
merge
(
t1
,
t2
);
String
msg
=
format
(
t1
,
t2
,
exp
,
res
);
if
(
exp
==
null
)
{
assertNull
(
"Incorrect accept: "
+
format
(
t1
,
t2
,
exp
,
res
)
,
res
);
assertNull
(
"Incorrect accept: "
+
msg
,
res
);
}
else
{
assertNotNull
(
"Incorrect reject: "
+
format
(
t1
,
t2
,
exp
,
res
)
,
res
);
assertTrue
(
"Incorrect result: "
+
format
(
t1
,
t2
,
exp
,
res
)
,
exp
.
equals
(
res
));
assertNotNull
(
"Incorrect reject: "
+
msg
,
res
);
assertTrue
(
"Incorrect result: "
+
msg
,
exp
.
equals
(
res
));
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment