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
37ed9cd2
Commit
37ed9cd2
authored
Mar 27, 2018
by
Skylot
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
core: make decompilation results more deterministic
parent
882af040
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
46 additions
and
32 deletions
+46
-32
ProcessClass.java
jadx-core/src/main/java/jadx/core/ProcessClass.java
+9
-5
CodeWriter.java
jadx-core/src/main/java/jadx/core/codegen/CodeWriter.java
+3
-2
NameGen.java
jadx-core/src/main/java/jadx/core/codegen/NameGen.java
+2
-1
PhiInsn.java
...ore/src/main/java/jadx/core/dex/instructions/PhiInsn.java
+2
-1
IfInfo.java
...rc/main/java/jadx/core/dex/regions/conditions/IfInfo.java
+1
-1
ReSugarCode.java
...ore/src/main/java/jadx/core/dex/visitors/ReSugarCode.java
+22
-20
SaveCode.java
jadx-core/src/main/java/jadx/core/dex/visitors/SaveCode.java
+4
-0
ProcessVariables.java
...java/jadx/core/dex/visitors/regions/ProcessVariables.java
+3
-2
No files found.
jadx-core/src/main/java/jadx/core/ProcessClass.java
View file @
37ed9cd2
package
jadx
.
core
;
import
java.util.List
;
import
org.jetbrains.annotations.Nullable
;
import
jadx.core.codegen.CodeGen
;
import
jadx.core.dex.nodes.ClassNode
;
import
jadx.core.dex.visitors.DepthTraversal
;
import
jadx.core.dex.visitors.IDexTreeVisitor
;
import
jadx.core.utils.ErrorsCounter
;
import
java.util.List
;
import
org.jetbrains.annotations.Nullable
;
import
static
jadx
.
core
.
dex
.
nodes
.
ProcessState
.
GENERATED
;
import
static
jadx
.
core
.
dex
.
nodes
.
ProcessState
.
NOT_LOADED
;
import
static
jadx
.
core
.
dex
.
nodes
.
ProcessState
.
PROCESSED
;
...
...
@@ -25,7 +25,7 @@ public final class ProcessClass {
if
(
codeGen
==
null
&&
cls
.
getState
()
==
PROCESSED
)
{
return
;
}
synchronized
(
cls
.
getClassInfo
(
))
{
synchronized
(
getSyncObj
(
cls
))
{
try
{
if
(
cls
.
getState
()
==
NOT_LOADED
)
{
cls
.
load
();
...
...
@@ -51,6 +51,10 @@ public final class ProcessClass {
}
}
public
static
Object
getSyncObj
(
ClassNode
cls
)
{
return
cls
.
getClassInfo
();
}
private
static
void
processDependencies
(
ClassNode
cls
,
List
<
IDexTreeVisitor
>
passes
)
{
for
(
ClassNode
depCls
:
cls
.
getDependencies
())
{
process
(
depCls
,
passes
,
null
);
...
...
jadx-core/src/main/java/jadx/core/codegen/CodeWriter.java
View file @
37ed9cd2
...
...
@@ -254,8 +254,9 @@ public class CodeWriter {
}
private
void
removeFirstEmptyLine
()
{
if
(
buf
.
indexOf
(
NL
)
==
0
)
{
buf
.
delete
(
0
,
NL
.
length
());
int
len
=
NL
.
length
();
if
(
buf
.
substring
(
0
,
len
).
equals
(
NL
))
{
buf
.
delete
(
0
,
len
);
}
}
...
...
jadx-core/src/main/java/jadx/core/codegen/NameGen.java
View file @
37ed9cd2
...
...
@@ -19,6 +19,7 @@ import jadx.core.utils.StringUtils;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.LinkedHashSet
;
import
java.util.Map
;
import
java.util.Set
;
...
...
@@ -26,7 +27,7 @@ public class NameGen {
private
static
final
Map
<
String
,
String
>
OBJ_ALIAS
;
private
final
Set
<
String
>
varNames
=
new
HashSet
<>();
private
final
Set
<
String
>
varNames
=
new
Linked
HashSet
<>();
private
final
MethodNode
mth
;
private
final
boolean
fallback
;
...
...
jadx-core/src/main/java/jadx/core/dex/instructions/PhiInsn.java
View file @
37ed9cd2
...
...
@@ -11,6 +11,7 @@ import jadx.core.utils.Utils;
import
jadx.core.utils.exceptions.JadxRuntimeException
;
import
java.util.IdentityHashMap
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
import
org.jetbrains.annotations.NotNull
;
...
...
@@ -21,7 +22,7 @@ public final class PhiInsn extends InsnNode {
public
PhiInsn
(
int
regNum
,
int
predecessors
)
{
super
(
InsnType
.
PHI
,
predecessors
);
this
.
blockBinds
=
new
Identity
HashMap
<>(
predecessors
);
this
.
blockBinds
=
new
Linked
HashMap
<>(
predecessors
);
setResult
(
InsnArg
.
reg
(
regNum
,
ArgType
.
UNKNOWN
));
add
(
AFlag
.
DONT_INLINE
);
}
...
...
jadx-core/src/main/java/jadx/core/dex/regions/conditions/IfInfo.java
View file @
37ed9cd2
...
...
@@ -16,7 +16,7 @@ public final class IfInfo {
private
BlockNode
ifBlock
;
public
IfInfo
(
IfCondition
condition
,
BlockNode
thenBlock
,
BlockNode
elseBlock
)
{
this
(
condition
,
thenBlock
,
elseBlock
,
new
HashSet
<
BlockNode
>(),
new
HashSet
<
BlockNode
>());
this
(
condition
,
thenBlock
,
elseBlock
,
new
HashSet
<
>(),
new
HashSet
<
>());
}
public
IfInfo
(
IfInfo
info
,
BlockNode
thenBlock
,
BlockNode
elseBlock
)
{
...
...
jadx-core/src/main/java/jadx/core/dex/visitors/ReSugarCode.java
View file @
37ed9cd2
package
jadx
.
core
.
dex
.
visitors
;
import
jadx.core.ProcessClass
;
import
jadx.core.dex.attributes.AFlag
;
import
jadx.core.dex.attributes.AType
;
import
jadx.core.dex.attributes.nodes.EnumMapAttr
;
...
...
@@ -141,7 +142,6 @@ public class ReSugarCode extends AbstractVisitor {
}
enumMapField
.
add
(
AFlag
.
DONT_GENERATE
);
checkAndHideClass
(
enumMapField
.
getParentClass
());
return
;
}
private
static
EnumMapAttr
.
KeyValueMap
getEnumMap
(
MethodNode
mth
,
FieldNode
field
)
{
...
...
@@ -150,6 +150,7 @@ public class ReSugarCode extends AbstractVisitor {
if
(
mapAttr
!=
null
)
{
return
mapAttr
.
getMap
(
field
);
}
synchronized
(
ProcessClass
.
getSyncObj
(
syntheticClass
))
{
mapAttr
=
new
EnumMapAttr
();
syntheticClass
.
addAttr
(
mapAttr
);
...
...
@@ -178,6 +179,7 @@ public class ReSugarCode extends AbstractVisitor {
}
return
mapAttr
.
getMap
(
field
);
}
}
private
static
void
addToEnumMap
(
MethodNode
mth
,
EnumMapAttr
mapAttr
,
InsnNode
aputInsn
)
{
InsnArg
litArg
=
aputInsn
.
getArg
(
2
);
...
...
jadx-core/src/main/java/jadx/core/dex/visitors/SaveCode.java
View file @
37ed9cd2
...
...
@@ -4,6 +4,7 @@ import java.io.File;
import
jadx.api.JadxArgs
;
import
jadx.core.codegen.CodeWriter
;
import
jadx.core.dex.attributes.AFlag
;
import
jadx.core.dex.nodes.ClassNode
;
public
class
SaveCode
{
...
...
@@ -11,6 +12,9 @@ public class SaveCode {
private
SaveCode
()
{}
public
static
void
save
(
File
dir
,
JadxArgs
args
,
ClassNode
cls
)
{
if
(
cls
.
contains
(
AFlag
.
DONT_GENERATE
))
{
return
;
}
CodeWriter
clsCode
=
cls
.
getCode
();
String
fileName
=
cls
.
getClassInfo
().
getFullPath
()
+
".java"
;
if
(
args
.
isFallbackMode
())
{
...
...
jadx-core/src/main/java/jadx/core/dex/visitors/regions/ProcessVariables.java
View file @
37ed9cd2
...
...
@@ -25,6 +25,7 @@ import java.util.HashMap;
import
java.util.HashSet
;
import
java.util.Iterator
;
import
java.util.LinkedHashMap
;
import
java.util.LinkedHashSet
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map.Entry
;
...
...
@@ -72,8 +73,8 @@ public class ProcessVariables extends AbstractVisitor {
private
RegisterArg
arg
;
private
VarName
varName
;
private
IRegion
argRegion
;
private
final
Set
<
IRegion
>
usage
=
new
HashSet
<>(
2
);
private
final
Set
<
IRegion
>
assigns
=
new
HashSet
<>(
2
);
private
final
Set
<
IRegion
>
usage
=
new
Linked
HashSet
<>(
2
);
private
final
Set
<
IRegion
>
assigns
=
new
Linked
HashSet
<>(
2
);
public
void
setArg
(
RegisterArg
arg
)
{
this
.
arg
=
arg
;
...
...
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