Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2301_76393173
jadx
提交
07402ba4
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,发现更多精彩内容 >>
提交
07402ba4
编写于
10月 19, 2013
作者:
S
Skylot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
core: fix "null" enum field
上级
d6069820
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
43 addition
and
2 deletion
+43
-2
jadx-core/src/main/java/jadx/core/dex/instructions/args/RegisterArg.java
...ain/java/jadx/core/dex/instructions/args/RegisterArg.java
+24
-1
jadx-core/src/main/java/jadx/core/dex/nodes/DexNode.java
jadx-core/src/main/java/jadx/core/dex/nodes/DexNode.java
+9
-0
jadx-core/src/main/java/jadx/core/dex/visitors/EnumVisitor.java
...ore/src/main/java/jadx/core/dex/visitors/EnumVisitor.java
+4
-1
jadx-samples/src/main/java/jadx/samples/TestEnum.java
jadx-samples/src/main/java/jadx/samples/TestEnum.java
+6
-0
未找到文件。
jadx-core/src/main/java/jadx/core/dex/instructions/args/RegisterArg.java
浏览文件 @
07402ba4
package
jadx.core.dex.instructions.args
;
import
jadx.core.dex.attributes.AttributeType
;
import
jadx.core.dex.info.FieldInfo
;
import
jadx.core.dex.instructions.ConstClassNode
;
import
jadx.core.dex.instructions.ConstStringNode
;
import
jadx.core.dex.instructions.IndexInsnNode
;
import
jadx.core.dex.instructions.InsnType
;
import
jadx.core.dex.nodes.DexNode
;
import
jadx.core.dex.nodes.FieldNode
;
import
jadx.core.dex.nodes.InsnNode
;
import
jadx.core.dex.nodes.parser.FieldValueAttr
;
import
jadx.core.dex.visitors.InstructionRemover
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
public
class
RegisterArg
extends
InsnArg
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
RegisterArg
.
class
);
protected
final
int
regNum
;
public
RegisterArg
(
int
rn
)
{
...
...
@@ -45,7 +56,7 @@ public class RegisterArg extends InsnArg {
*
* @return LiteralArg, String or ArgType
*/
public
Object
getConstValue
()
{
public
Object
getConstValue
(
DexNode
dex
)
{
InsnNode
parInsn
=
getAssignInsn
();
if
(
parInsn
!=
null
)
{
InsnType
insnType
=
parInsn
.
getType
();
...
...
@@ -56,6 +67,18 @@ public class RegisterArg extends InsnArg {
return
((
ConstStringNode
)
parInsn
).
getString
();
case
CONST_CLASS:
return
((
ConstClassNode
)
parInsn
).
getClsType
();
case
SGET:
FieldInfo
f
=
(
FieldInfo
)
((
IndexInsnNode
)
parInsn
).
getIndex
();
FieldNode
fieldNode
=
dex
.
resolveField
(
f
);
if
(
fieldNode
!=
null
)
{
FieldValueAttr
attr
=
(
FieldValueAttr
)
fieldNode
.
getAttributes
().
get
(
AttributeType
.
FIELD_VALUE
);
if
(
attr
!=
null
)
{
return
attr
.
getValue
();
}
}
else
{
LOG
.
warn
(
"Field {} not found in dex {}"
,
f
,
dex
);
}
break
;
}
}
return
null
;
...
...
jadx-core/src/main/java/jadx/core/dex/nodes/DexNode.java
浏览文件 @
07402ba4
package
jadx.core.dex.nodes
;
import
jadx.core.dex.info.ClassInfo
;
import
jadx.core.dex.info.FieldInfo
;
import
jadx.core.dex.info.MethodInfo
;
import
jadx.core.dex.instructions.args.ArgType
;
import
jadx.core.utils.exceptions.DecodeException
;
...
...
@@ -64,6 +65,14 @@ public class DexNode {
return
null
;
}
public
FieldNode
resolveField
(
FieldInfo
field
)
{
ClassNode
cls
=
resolveClass
(
field
.
getDeclClass
());
if
(
cls
!=
null
)
{
return
cls
.
searchField
(
field
);
}
return
null
;
}
public
Map
<
Object
,
FieldNode
>
getConstFields
()
{
return
constFields
;
}
...
...
jadx-core/src/main/java/jadx/core/dex/visitors/EnumVisitor.java
浏览文件 @
07402ba4
...
...
@@ -117,7 +117,10 @@ public class EnumVisitor extends AbstractVisitor {
RegisterArg
nameArg
=
(
RegisterArg
)
insn
.
getArg
(
0
);
// InsnArg pos = insn.getArg(1);
// TODO add check: pos == j
String
name
=
(
String
)
nameArg
.
getConstValue
();
String
name
=
(
String
)
nameArg
.
getConstValue
(
cls
.
dex
());
if
(
name
==
null
)
{
throw
new
JadxException
(
"Unknown enum field name: "
+
cls
);
}
EnumField
field
=
new
EnumField
(
name
,
insn
.
getArgsCount
()
-
2
);
attr
.
getFields
().
add
(
field
);
...
...
jadx-samples/src/main/java/jadx/samples/TestEnum.java
浏览文件 @
07402ba4
...
...
@@ -11,6 +11,12 @@ public class TestEnum extends AbstractTest {
NORTH
,
SOUTH
,
EAST
,
WEST
}
public
static
final
String
DOG
=
"DOG"
;
public
enum
Animal
{
CAT
,
DOG
}
private
static
int
three
=
3
;
public
enum
Numbers
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录