Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
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
ab593e3c
Commit
ab593e3c
authored
Jan 03, 2014
by
Skylot
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor some classes
parent
4a0aacf1
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
69 additions
and
58 deletions
+69
-58
AttributesList.java
...rc/main/java/jadx/core/dex/attributes/AttributesList.java
+2
-1
ClassNode.java
jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java
+52
-39
InsnContainer.java
...core/src/main/java/jadx/core/dex/nodes/InsnContainer.java
+1
-1
StaticValuesParser.java
...n/java/jadx/core/dex/nodes/parser/StaticValuesParser.java
+4
-5
BlockProcessingHelper.java
...in/java/jadx/core/dex/visitors/BlockProcessingHelper.java
+0
-4
BlockUtils.java
jadx-core/src/main/java/jadx/core/utils/BlockUtils.java
+3
-3
MainWindow.java
jadx-gui/src/main/java/jadx/gui/MainWindow.java
+4
-2
JClass.java
jadx-gui/src/main/java/jadx/gui/treemodel/JClass.java
+1
-1
JPackage.java
jadx-gui/src/main/java/jadx/gui/treemodel/JPackage.java
+2
-2
No files found.
jadx-core/src/main/java/jadx/core/dex/attributes/AttributesList.java
View file @
ab593e3c
...
...
@@ -10,6 +10,7 @@ import java.util.Collections;
import
java.util.EnumMap
;
import
java.util.EnumSet
;
import
java.util.Iterator
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
...
...
@@ -30,7 +31,7 @@ public final class AttributesList {
public
AttributesList
()
{
flags
=
EnumSet
.
noneOf
(
AttributeFlag
.
class
);
uniqAttr
=
new
EnumMap
<
AttributeType
,
IAttribute
>(
AttributeType
.
class
);
attributes
=
new
ArrayList
<
IAttribute
>(
0
);
attributes
=
new
LinkedList
<
IAttribute
>(
);
attrCount
=
new
int
[
AttributeType
.
getNotUniqCount
()];
}
...
...
jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java
View file @
ab593e3c
...
...
@@ -22,7 +22,7 @@ import jadx.core.utils.exceptions.DecodeException;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.
Linked
HashMap
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -39,49 +39,56 @@ public class ClassNode extends LineAttrNode implements ILoadable {
private
final
DexNode
dex
;
private
final
ClassInfo
clsInfo
;
private
final
AccessInfo
accessFlags
;
private
ClassInfo
superClass
;
private
List
<
ClassInfo
>
interfaces
;
private
Map
<
ArgType
,
List
<
ArgType
>>
genericMap
;
private
final
List
<
MethodNode
>
methods
=
new
ArrayList
<
MethodNode
>();
private
final
List
<
FieldNode
>
fields
=
new
ArrayList
<
FieldNode
>();
private
final
AccessInfo
accessFlags
;
private
final
List
<
MethodNode
>
methods
;
private
final
List
<
FieldNode
>
fields
;
private
Map
<
Object
,
FieldNode
>
constFields
=
Collections
.
emptyMap
();
private
List
<
ClassNode
>
innerClasses
=
Collections
.
emptyList
();
private
final
Map
<
Object
,
FieldNode
>
constFields
=
new
HashMap
<
Object
,
FieldNode
>();
private
CodeWriter
code
;
// generated code
public
ClassNode
(
DexNode
dex
,
ClassDef
cls
)
throws
DecodeException
{
this
.
dex
=
dex
;
this
.
clsInfo
=
ClassInfo
.
fromDex
(
dex
,
cls
.
getTypeIndex
());
try
{
this
.
superClass
=
cls
.
getSupertypeIndex
()
==
DexNode
.
NO_INDEX
?
null
:
ClassInfo
.
fromDex
(
dex
,
cls
.
getSupertypeIndex
());
if
(
cls
.
getSupertypeIndex
()
==
DexNode
.
NO_INDEX
)
{
this
.
superClass
=
null
;
}
else
{
this
.
superClass
=
ClassInfo
.
fromDex
(
dex
,
cls
.
getSupertypeIndex
());
}
this
.
interfaces
=
new
ArrayList
<
ClassInfo
>(
cls
.
getInterfaces
().
length
);
for
(
short
interfaceIdx
:
cls
.
getInterfaces
())
{
this
.
interfaces
.
add
(
ClassInfo
.
fromDex
(
dex
,
interfaceIdx
));
}
if
(
cls
.
getClassDataOffset
()
!=
0
)
{
ClassData
clsData
=
dex
.
readClassData
(
cls
);
int
mthsCount
=
clsData
.
getDirectMethods
().
length
+
clsData
.
getVirtualMethods
().
length
;
int
fieldsCount
=
clsData
.
getStaticFields
().
length
+
clsData
.
getInstanceFields
().
length
;
for
(
Method
mth
:
clsData
.
getDirectMethods
())
methods
.
add
(
new
MethodNode
(
this
,
mth
)
);
methods
=
new
ArrayList
<
MethodNode
>(
mthsCount
);
fields
=
new
ArrayList
<
FieldNode
>(
fieldsCount
);
for
(
Method
mth
:
clsData
.
getVirtualMethods
())
for
(
Method
mth
:
clsData
.
getDirectMethods
())
{
methods
.
add
(
new
MethodNode
(
this
,
mth
));
}
for
(
Method
mth
:
clsData
.
getVirtualMethods
())
{
methods
.
add
(
new
MethodNode
(
this
,
mth
));
}
for
(
Field
f
:
clsData
.
getStaticFields
())
for
(
Field
f
:
clsData
.
getStaticFields
())
{
fields
.
add
(
new
FieldNode
(
this
,
f
));
}
loadStaticValues
(
cls
,
fields
);
for
(
Field
f
:
clsData
.
getInstanceFields
())
for
(
Field
f
:
clsData
.
getInstanceFields
())
{
fields
.
add
(
new
FieldNode
(
this
,
f
));
}
}
else
{
methods
=
Collections
.
emptyList
();
fields
=
Collections
.
emptyList
();
}
loadAnnotations
(
cls
);
...
...
@@ -98,13 +105,14 @@ public class ClassNode extends LineAttrNode implements ILoadable {
}
}
// restore original access flags from dalvik annotation if present
int
accFlagsValue
;
Annotation
a
=
getAttributes
().
getAnnotation
(
Consts
.
DALVIK_INNER_CLASS
);
if
(
a
!=
null
)
if
(
a
!=
null
)
{
accFlagsValue
=
(
Integer
)
a
.
getValues
().
get
(
"accessFlags"
);
else
}
else
{
accFlagsValue
=
cls
.
getAccessFlags
();
}
this
.
accessFlags
=
new
AccessInfo
(
accFlagsValue
,
AFType
.
CLASS
);
}
catch
(
Exception
e
)
{
...
...
@@ -134,8 +142,8 @@ public class ClassNode extends LineAttrNode implements ILoadable {
int
offset
=
cls
.
getStaticValuesOffset
();
if
(
offset
!=
0
)
{
StaticValuesParser
parser
=
new
StaticValuesParser
(
dex
,
dex
.
openSection
(
offset
));
parser
.
processFields
(
staticFields
);
int
count
=
parser
.
processFields
(
staticFields
);
constFields
=
new
LinkedHashMap
<
Object
,
FieldNode
>(
count
);
for
(
FieldNode
f
:
staticFields
)
{
AccessInfo
accFlags
=
f
.
getAccessFlags
();
if
(
accFlags
.
isStatic
()
&&
accFlags
.
isFinal
())
{
...
...
@@ -154,9 +162,9 @@ public class ClassNode extends LineAttrNode implements ILoadable {
@SuppressWarnings
(
"unchecked"
)
private
void
parseClassSignature
()
{
Annotation
a
=
this
.
getAttributes
().
getAnnotation
(
Consts
.
DALVIK_SIGNATURE
);
if
(
a
==
null
)
if
(
a
==
null
)
{
return
;
}
String
sign
=
Utils
.
mergeSignature
((
List
<
String
>)
a
.
getDefaultValue
());
// parse generic map
int
end
=
Utils
.
getGenericEnd
(
sign
);
...
...
@@ -188,13 +196,13 @@ public class ClassNode extends LineAttrNode implements ILoadable {
private
void
setFieldsTypesFromSignature
()
{
for
(
FieldNode
field
:
fields
)
{
Annotation
a
=
field
.
getAttributes
().
getAnnotation
(
Consts
.
DALVIK_SIGNATURE
);
if
(
a
==
null
)
continue
;
String
sign
=
Utils
.
mergeSignature
((
List
<
String
>)
a
.
getDefaultValue
());
ArgType
gType
=
ArgType
.
parseSignature
(
sign
);
if
(
gType
!=
null
)
field
.
setType
(
gType
);
if
(
a
!=
null
)
{
String
sign
=
Utils
.
mergeSignature
((
List
<
String
>)
a
.
getDefaultValue
())
;
ArgType
gType
=
ArgType
.
parseSignature
(
sign
);
if
(
gType
!=
null
)
{
field
.
setType
(
gType
);
}
}
}
}
...
...
@@ -288,8 +296,9 @@ public class ClassNode extends LineAttrNode implements ILoadable {
public
FieldNode
searchFieldById
(
int
id
)
{
String
name
=
FieldInfo
.
getNameById
(
dex
,
id
);
for
(
FieldNode
f
:
fields
)
{
if
(
f
.
getName
().
equals
(
name
))
if
(
f
.
getName
().
equals
(
name
))
{
return
f
;
}
}
return
null
;
}
...
...
@@ -300,24 +309,27 @@ public class ClassNode extends LineAttrNode implements ILoadable {
public
FieldNode
searchFieldByName
(
String
name
)
{
for
(
FieldNode
f
:
fields
)
{
if
(
f
.
getName
().
equals
(
name
))
if
(
f
.
getName
().
equals
(
name
))
{
return
f
;
}
}
return
null
;
}
public
MethodNode
searchMethod
(
MethodInfo
mth
)
{
for
(
MethodNode
m
:
methods
)
{
if
(
m
.
getMethodInfo
().
equals
(
mth
))
if
(
m
.
getMethodInfo
().
equals
(
mth
))
{
return
m
;
}
}
return
null
;
}
public
MethodNode
searchMethodByName
(
String
shortId
)
{
for
(
MethodNode
m
:
methods
)
{
if
(
m
.
getMethodInfo
().
getShortId
().
equals
(
shortId
))
if
(
m
.
getMethodInfo
().
getShortId
().
equals
(
shortId
))
{
return
m
;
}
}
return
null
;
}
...
...
@@ -331,8 +343,9 @@ public class ClassNode extends LineAttrNode implements ILoadable {
}
public
void
addInnerClass
(
ClassNode
cls
)
{
if
(
innerClasses
.
isEmpty
())
if
(
innerClasses
.
isEmpty
())
{
innerClasses
=
new
ArrayList
<
ClassNode
>(
3
);
}
innerClasses
.
add
(
cls
);
}
...
...
@@ -351,7 +364,7 @@ public class ClassNode extends LineAttrNode implements ILoadable {
if
(
mth
.
getAccessFlags
().
isConstructor
()
&&
mth
.
getMethodInfo
().
isConstructor
()
&&
(
mth
.
getMethodInfo
().
getArgsCount
()
==
0
||
(
mth
.
getArguments
(
false
)
!=
null
&&
mth
.
getArguments
(
false
).
isEmpty
())))
{
||
(
mth
.
getArguments
(
false
)
!=
null
&&
mth
.
getArguments
(
false
).
isEmpty
())))
{
return
mth
;
}
}
...
...
jadx-core/src/main/java/jadx/core/dex/nodes/InsnContainer.java
View file @
ab593e3c
...
...
@@ -6,7 +6,7 @@ import java.util.List;
public
class
InsnContainer
extends
AttrNode
implements
IBlock
{
private
List
<
InsnNode
>
insns
;
private
final
List
<
InsnNode
>
insns
;
public
InsnContainer
(
List
<
InsnNode
>
insns
)
{
this
.
insns
=
insns
;
...
...
jadx-core/src/main/java/jadx/core/dex/nodes/parser/StaticValuesParser.java
View file @
ab593e3c
...
...
@@ -15,13 +15,12 @@ public class StaticValuesParser extends EncValueParser {
super
(
dex
,
in
);
}
public
void
processFields
(
List
<
FieldNode
>
fields
)
throws
DecodeException
{
int
size
=
Leb128Utils
.
readUnsignedLeb128
(
in
);
visitArray
(
size
);
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
public
int
processFields
(
List
<
FieldNode
>
fields
)
throws
DecodeException
{
int
count
=
Leb128Utils
.
readUnsignedLeb128
(
in
);
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
Object
value
=
parseValue
();
fields
.
get
(
i
).
getAttributes
().
add
(
new
FieldValueAttr
(
value
));
}
return
count
;
}
}
jadx-core/src/main/java/jadx/core/dex/visitors/BlockProcessingHelper.java
View file @
ab593e3c
...
...
@@ -24,7 +24,6 @@ public class BlockProcessingHelper {
if
(
mth
.
isNoCode
())
{
return
;
}
for
(
BlockNode
block
:
mth
.
getBasicBlocks
())
{
markExceptionHandlers
(
block
);
}
...
...
@@ -78,7 +77,6 @@ public class BlockProcessingHelper {
for
(
BlockNode
node
:
BlockUtils
.
collectBlocksDominatedBy
(
block
,
block
))
{
excHandler
.
addBlock
(
node
);
}
for
(
BlockNode
excBlock
:
excHandler
.
getBlocks
())
{
// remove 'monitor-exit' from exception handler blocks
InstructionRemover
remover
=
new
InstructionRemover
(
excBlock
.
getInstructions
());
...
...
@@ -86,7 +84,6 @@ public class BlockProcessingHelper {
if
(
insn
.
getType
()
==
InsnType
.
MONITOR_ENTER
)
{
break
;
}
if
(
insn
.
getType
()
==
InsnType
.
MONITOR_EXIT
)
{
remover
.
add
(
insn
);
}
...
...
@@ -119,7 +116,6 @@ public class BlockProcessingHelper {
if
(
catchAttr
==
null
)
{
continue
;
}
if
(
commonCatchAttr
==
null
)
{
commonCatchAttr
=
catchAttr
;
}
else
if
(
commonCatchAttr
!=
catchAttr
)
{
...
...
jadx-core/src/main/java/jadx/core/utils/BlockUtils.java
View file @
ab593e3c
...
...
@@ -17,10 +17,11 @@ public class BlockUtils {
public
static
BlockNode
getBlockByOffset
(
int
offset
,
Iterable
<
BlockNode
>
casesBlocks
)
{
for
(
BlockNode
block
:
casesBlocks
)
{
if
(
block
.
getStartOffset
()
==
offset
)
if
(
block
.
getStartOffset
()
==
offset
)
{
return
block
;
}
}
throw
new
JadxRuntimeException
(
"Can'
r
find block by offset: "
throw
new
JadxRuntimeException
(
"Can'
t
find block by offset: "
+
InsnUtils
.
formatOffset
(
offset
)
+
" in list "
+
casesBlocks
);
}
...
...
@@ -30,7 +31,6 @@ public class BlockUtils {
if
(
list
.
size
()
>
2
)
{
list
=
cleanBlockList
(
list
);
}
assert
list
.
size
()
==
2
:
"too many nodes for selectOther: "
+
node
+
" in "
+
list
;
BlockNode
first
=
list
.
get
(
0
);
if
(
first
!=
node
)
...
...
jadx-gui/src/main/java/jadx/gui/MainWindow.java
View file @
ab593e3c
...
...
@@ -81,10 +81,12 @@ public class MainWindow extends JFrame {
private
final
JadxWrapper
wrapper
;
private
JPanel
mainPanel
;
private
JTree
tree
;
private
final
JTabbedPane
tabbedPane
=
new
JTabbedPane
();
private
DefaultTreeModel
treeModel
;
private
Map
<
JClass
,
Component
>
openTabs
=
new
HashMap
<
JClass
,
Component
>();
private
final
JTabbedPane
tabbedPane
=
new
JTabbedPane
();
private
final
Map
<
JClass
,
Component
>
openTabs
=
new
HashMap
<
JClass
,
Component
>();
public
MainWindow
(
JadxWrapper
wrapper
)
{
this
.
wrapper
=
wrapper
;
...
...
jadx-gui/src/main/java/jadx/gui/treemodel/JClass.java
View file @
ab593e3c
...
...
@@ -50,7 +50,7 @@ public class JClass extends JNode {
}
@Override
public
void
updateChilds
()
{
public
synchronized
void
updateChilds
()
{
removeAllChildren
();
if
(!
loaded
)
{
add
(
new
TextNode
(
NLS
.
str
(
"tree.loading"
)));
...
...
jadx-gui/src/main/java/jadx/gui/treemodel/JPackage.java
View file @
ab593e3c
...
...
@@ -15,8 +15,8 @@ public class JPackage extends JNode implements Comparable<JPackage> {
private
static
final
ImageIcon
PACKAGE_ICON
=
Utils
.
openIcon
(
"package_obj"
);
private
String
name
;
private
List
<
JClass
>
classes
;
private
List
<
JPackage
>
innerPackages
=
new
ArrayList
<
JPackage
>(
1
);
private
final
List
<
JClass
>
classes
;
private
final
List
<
JPackage
>
innerPackages
=
new
ArrayList
<
JPackage
>(
1
);
public
JPackage
(
JavaPackage
pkg
)
{
this
.
name
=
pkg
.
getName
();
...
...
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