Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2301_76393173
jadx
提交
0c4b807c
J
jadx
项目概览
2301_76393173
/
jadx
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jadx
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
0c4b807c
编写于
1月 03, 2020
作者:
S
Skylot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: improve ClassNode reloading and revert some changes
上级
1eca2b6c
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
26 addition
and
75 deletion
+26
-75
jadx-core/src/main/java/jadx/api/ICodeCache.java
jadx-core/src/main/java/jadx/api/ICodeCache.java
+0
-2
jadx-core/src/main/java/jadx/api/JavaClass.java
jadx-core/src/main/java/jadx/api/JavaClass.java
+3
-2
jadx-core/src/main/java/jadx/api/impl/InMemoryCodeCache.java
jadx-core/src/main/java/jadx/api/impl/InMemoryCodeCache.java
+0
-5
jadx-core/src/main/java/jadx/api/impl/NoOpCodeCache.java
jadx-core/src/main/java/jadx/api/impl/NoOpCodeCache.java
+0
-4
jadx-core/src/main/java/jadx/core/dex/attributes/AType.java
jadx-core/src/main/java/jadx/core/dex/attributes/AType.java
+0
-6
jadx-core/src/main/java/jadx/core/dex/attributes/nodes/RenameReasonAttr.java
...java/jadx/core/dex/attributes/nodes/RenameReasonAttr.java
+1
-1
jadx-core/src/main/java/jadx/core/dex/info/ConstStorage.java
jadx-core/src/main/java/jadx/core/dex/info/ConstStorage.java
+2
-4
jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java
jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java
+15
-36
jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java
jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java
+0
-4
jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java
...e/src/main/java/jadx/core/dex/visitors/ClassModifier.java
+1
-1
jadx-core/src/main/java/jadx/core/dex/visitors/EnumVisitor.java
...ore/src/main/java/jadx/core/dex/visitors/EnumVisitor.java
+4
-1
jadx-core/src/main/java/jadx/core/dex/visitors/debuginfo/DebugInfoParseVisitor.java
...dx/core/dex/visitors/debuginfo/DebugInfoParseVisitor.java
+0
-9
未找到文件。
jadx-core/src/main/java/jadx/api/ICodeCache.java
浏览文件 @
0c4b807c
...
...
@@ -8,6 +8,4 @@ public interface ICodeCache {
@Nullable
ICodeInfo
get
(
String
clsFullName
);
void
remove
(
String
clsFullName
);
}
jadx-core/src/main/java/jadx/api/JavaClass.java
浏览文件 @
0c4b807c
...
...
@@ -57,8 +57,9 @@ public final class JavaClass implements JavaNode {
cls
.
decompile
();
}
public
void
refresh
()
{
cls
.
refresh
();
public
synchronized
void
refresh
()
{
listsLoaded
=
false
;
cls
.
reloadCode
();
}
public
synchronized
String
getSmali
()
{
...
...
jadx-core/src/main/java/jadx/api/impl/InMemoryCodeCache.java
浏览文件 @
0c4b807c
...
...
@@ -21,9 +21,4 @@ public class InMemoryCodeCache implements ICodeCache {
public
@Nullable
ICodeInfo
get
(
String
clsFullName
)
{
return
storage
.
get
(
clsFullName
);
}
@Override
public
void
remove
(
String
clsFullName
)
{
storage
.
remove
(
clsFullName
);
}
}
jadx-core/src/main/java/jadx/api/impl/NoOpCodeCache.java
浏览文件 @
0c4b807c
...
...
@@ -16,8 +16,4 @@ public class NoOpCodeCache implements ICodeCache {
public
@Nullable
ICodeInfo
get
(
String
clsFullName
)
{
return
null
;
}
@Override
public
void
remove
(
String
clsFullName
)
{
}
}
jadx-core/src/main/java/jadx/core/dex/attributes/AType.java
浏览文件 @
0c4b807c
...
...
@@ -86,11 +86,5 @@ public class AType<T extends IAttribute> {
public
static
final
Set
<
AType
<?>>
SKIP_ON_UNLOAD
=
new
HashSet
<>(
Arrays
.
asList
(
FIELD_REPLACE
,
METHOD_INLINE
,
COMMENTS
,
RENAME_REASON
,
JADX_WARN
,
JADX_ERROR
,
FIELD_INIT
,
SOURCE_FILE
,
SKIP_MTH_ARGS
));
}
jadx-core/src/main/java/jadx/core/dex/attributes/nodes/RenameReasonAttr.java
浏览文件 @
0c4b807c
...
...
@@ -46,7 +46,7 @@ public class RenameReasonAttr implements IAttribute {
public
RenameReasonAttr
append
(
String
reason
)
{
if
(
description
.
isEmpty
())
{
description
+=
reason
;
}
else
if
(!
description
.
contains
(
reason
))
{
}
else
{
description
+=
" and "
+
reason
;
}
return
this
;
...
...
jadx-core/src/main/java/jadx/core/dex/info/ConstStorage.java
浏览文件 @
0c4b807c
...
...
@@ -64,7 +64,7 @@ public class ConstStorage {
this
.
replaceEnabled
=
args
.
isReplaceConsts
();
}
public
void
processConstFields
(
ClassNode
cls
,
List
<
FieldNode
>
staticFields
,
boolean
isRefresh
)
{
public
void
processConstFields
(
ClassNode
cls
,
List
<
FieldNode
>
staticFields
)
{
if
(!
replaceEnabled
||
staticFields
.
isEmpty
())
{
return
;
}
...
...
@@ -76,9 +76,7 @@ public class ConstStorage {
&&
fv
.
getValue
()
!=
null
&&
fv
.
getValueType
()
==
FieldInitAttr
.
InitType
.
CONST
&&
fv
!=
FieldInitAttr
.
NULL_VALUE
)
{
if
(!
isRefresh
)
{
addConstField
(
cls
,
f
,
fv
.
getValue
(),
accFlags
.
isPublic
());
}
addConstField
(
cls
,
f
,
fv
.
getValue
(),
accFlags
.
isPublic
());
}
}
}
...
...
jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java
浏览文件 @
0c4b807c
...
...
@@ -54,8 +54,8 @@ public class ClassNode extends LineAttrNode implements ILoadable, ICodeNode {
private
List
<
ArgType
>
interfaces
;
private
List
<
GenericInfo
>
generics
=
Collections
.
emptyList
();
private
final
List
<
MethodNode
>
methods
;
private
final
List
<
FieldNode
>
fields
;
private
List
<
MethodNode
>
methods
;
private
List
<
FieldNode
>
fields
;
private
List
<
ClassNode
>
innerClasses
=
Collections
.
emptyList
();
// store smali
...
...
@@ -74,6 +74,10 @@ public class ClassNode extends LineAttrNode implements ILoadable, ICodeNode {
this
.
cls
=
cls
;
this
.
clsDefOffset
=
cls
.
getOffset
();
this
.
clsInfo
=
ClassInfo
.
fromDex
(
dex
,
cls
.
getTypeIndex
());
initialLoad
();
}
private
void
initialLoad
()
{
try
{
if
(
cls
.
getSupertypeIndex
()
==
DexNode
.
NO_INDEX
)
{
this
.
superClass
=
null
;
...
...
@@ -102,7 +106,7 @@ public class ClassNode extends LineAttrNode implements ILoadable, ICodeNode {
for
(
Field
f
:
clsData
.
getStaticFields
())
{
fields
.
add
(
new
FieldNode
(
this
,
f
));
}
loadStaticValues
(
cls
,
fields
,
false
);
loadStaticValues
(
cls
,
fields
);
for
(
Field
f
:
clsData
.
getInstanceFields
())
{
fields
.
add
(
new
FieldNode
(
this
,
f
));
}
...
...
@@ -169,7 +173,7 @@ public class ClassNode extends LineAttrNode implements ILoadable, ICodeNode {
}
}
private
void
loadStaticValues
(
ClassDef
cls
,
List
<
FieldNode
>
staticFields
,
boolean
isRefresh
)
throws
DecodeException
{
private
void
loadStaticValues
(
ClassDef
cls
,
List
<
FieldNode
>
staticFields
)
throws
DecodeException
{
for
(
FieldNode
f
:
staticFields
)
{
AccessInfo
flags
=
f
.
getAccessFlags
();
if
(
flags
.
isStatic
()
&&
flags
.
isFinal
())
{
...
...
@@ -186,7 +190,7 @@ public class ClassNode extends LineAttrNode implements ILoadable, ICodeNode {
parser
.
processFields
(
staticFields
);
// process const fields
root
().
getConstValues
().
processConstFields
(
this
,
staticFields
,
isRefresh
);
root
().
getConstValues
().
processConstFields
(
this
,
staticFields
);
}
private
void
parseClassSignature
()
{
...
...
@@ -275,7 +279,11 @@ public class ClassNode extends LineAttrNode implements ILoadable, ICodeNode {
return
decompile
(
true
);
}
public
ICodeInfo
reloadCode
()
{
public
synchronized
ICodeInfo
reloadCode
()
{
unload
();
clearAttributes
();
initialLoad
();
load
();
return
decompile
(
false
);
}
...
...
@@ -294,36 +302,6 @@ public class ClassNode extends LineAttrNode implements ILoadable, ICodeNode {
return
codeInfo
;
}
public
synchronized
ICodeInfo
refresh
()
{
reloadRecursive
();
return
decompile
(
false
);
}
private
void
reloadRecursive
()
{
load
();
int
sfIdx
=
cls
.
getSourceFileIndex
();
if
(
sfIdx
!=
DexNode
.
NO_INDEX
)
{
String
fileName
=
dex
.
getString
(
sfIdx
);
addSourceFilenameAttr
(
fileName
);
}
for
(
ClassNode
innerCls
:
getInnerClasses
())
{
innerCls
.
reloadRecursive
();
}
loadStaticInfo
();
loadAnnotations
(
cls
);
}
private
void
loadStaticInfo
()
{
try
{
if
(
cls
!=
null
)
{
loadStaticValues
(
cls
,
fields
,
true
);
}
}
catch
(
DecodeException
e
)
{
LOG
.
error
(
"Got DecodeException in loadStaticValues() for class {}"
,
getRawName
());
e
.
printStackTrace
();
}
}
@Override
public
void
load
()
{
for
(
MethodNode
mth
:
getMethods
())
{
...
...
@@ -346,6 +324,7 @@ public class ClassNode extends LineAttrNode implements ILoadable, ICodeNode {
fields
.
forEach
(
FieldNode:
:
unloadAttributes
);
unloadAttributes
();
setState
(
NOT_LOADED
);
this
.
smali
=
null
;
}
private
void
buildCache
()
{
...
...
jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java
浏览文件 @
0c4b807c
...
...
@@ -154,10 +154,6 @@ public class MethodNode extends LineAttrNode implements ILoadable, ICodeNode {
public
void
checkInstructions
()
{
List
<
RegisterArg
>
list
=
new
ArrayList
<>();
if
(
instructions
==
null
)
{
LOG
.
debug
(
"instructions == null, reloading method {}.{}"
,
getClass
().
getName
(),
getName
());
reload
();
}
for
(
InsnNode
insnNode
:
instructions
)
{
if
(
insnNode
==
null
)
{
continue
;
...
...
jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java
浏览文件 @
0c4b807c
...
...
@@ -105,7 +105,7 @@ public class ClassModifier extends AbstractVisitor {
return
false
;
}
List
<
RegisterArg
>
args
=
mth
.
getArgRegs
();
if
(
args
.
isEmpty
())
{
if
(
args
.
isEmpty
()
||
mth
.
contains
(
AFlag
.
SKIP_FIRST_ARG
)
)
{
return
false
;
}
RegisterArg
arg
=
args
.
get
(
0
);
...
...
jadx-core/src/main/java/jadx/core/dex/visitors/EnumVisitor.java
浏览文件 @
0c4b807c
...
...
@@ -5,6 +5,8 @@ import java.util.List;
import
org.jetbrains.annotations.Nullable
;
import
com.android.dx.rop.code.AccessFlags
;
import
jadx.core.codegen.TypeGen
;
import
jadx.core.deobf.NameMapper
;
import
jadx.core.dex.attributes.AFlag
;
...
...
@@ -45,7 +47,8 @@ public class EnumVisitor extends AbstractVisitor {
if
(!
convertToEnum
(
cls
))
{
AccessInfo
accessFlags
=
cls
.
getAccessFlags
();
if
(
accessFlags
.
isEnum
())
{
cls
.
addAttr
(
AType
.
COMMENTS
,
"'enum' modifier should be removed"
);
cls
.
setAccessFlags
(
accessFlags
.
remove
(
AccessFlags
.
ACC_ENUM
));
cls
.
addAttr
(
AType
.
COMMENTS
,
"'enum' modifier removed"
);
}
}
return
true
;
...
...
jadx-core/src/main/java/jadx/core/dex/visitors/debuginfo/DebugInfoParseVisitor.java
浏览文件 @
0c4b807c
...
...
@@ -48,15 +48,6 @@ public class DebugInfoParseVisitor extends AbstractVisitor {
private
void
processDebugInfo
(
MethodNode
mth
,
int
debugOffset
)
{
InsnNode
[]
insnArr
=
mth
.
getInstructions
();
if
(
insnArr
==
null
)
{
LOG
.
debug
(
"insnArr == null, reloading method {}.{}"
,
getClass
().
getName
(),
mth
.
getName
());
mth
.
reload
();
insnArr
=
mth
.
getInstructions
();
}
if
(
insnArr
==
null
)
{
LOG
.
error
(
"insnArr == null even after reloading method {}.{} - bailing"
,
getClass
().
getName
(),
mth
.
getName
());
return
;
}
DebugInfoParser
debugInfoParser
=
new
DebugInfoParser
(
mth
,
debugOffset
,
insnArr
);
List
<
LocalVar
>
localVars
=
debugInfoParser
.
process
();
attachDebugInfo
(
mth
,
localVars
,
insnArr
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录