Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
keyescgm
jadx
提交
00f5e835
J
jadx
项目概览
keyescgm
/
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,发现更多精彩内容 >>
提交
00f5e835
编写于
10月 17, 2019
作者:
S
Skylot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: handle incorrect args count in signature (#763)
上级
d3ecc1f6
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
43 addition
and
14 deletion
+43
-14
jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java
jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java
+39
-14
jadx-core/src/main/java/jadx/core/dex/nodes/parser/SignatureParser.java
...main/java/jadx/core/dex/nodes/parser/SignatureParser.java
+4
-0
未找到文件。
jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java
浏览文件 @
00f5e835
...
...
@@ -199,28 +199,39 @@ public class MethodNode extends LineAttrNode implements ILoadable, ICodeNode {
if
(
argsTypes
.
isEmpty
())
{
return
null
;
}
if
(!
mthInfo
.
isConstructor
())
{
LOG
.
warn
(
"Wrong signature parse result: {} -> {}, not generic version: {}"
,
sp
,
argsTypes
,
mthArgs
);
return
null
;
}
else
if
(
getParentClass
().
getAccessFlags
().
isEnum
())
{
// TODO:
argsTypes
.
add
(
0
,
mthArgs
.
get
(
0
));
argsTypes
.
add
(
1
,
mthArgs
.
get
(
1
));
}
else
{
// add synthetic arg for outer class
argsTypes
.
add
(
0
,
mthArgs
.
get
(
0
));
}
if
(
argsTypes
.
size
()
!=
mthArgs
.
size
())
{
if
(!
tryFixArgsCounts
(
argsTypes
,
mthArgs
))
{
if
(
LOG
.
isDebugEnabled
())
{
LOG
.
debug
(
"Incorrect method signature, types: ({}), method: {}"
,
Utils
.
listToString
(
argsTypes
),
this
);
}
return
null
;
}
}
return
argsTypes
;
}
catch
(
JadxRuntime
Exception
e
)
{
LOG
.
error
(
"Method signature parse error: {}"
,
this
,
e
);
}
catch
(
Exception
e
)
{
addWarningComment
(
"Failed to parse method signature: "
+
sp
.
getSignature
()
,
e
);
return
null
;
}
}
private
boolean
tryFixArgsCounts
(
List
<
ArgType
>
argsTypes
,
List
<
ArgType
>
mthArgs
)
{
if
(!
mthInfo
.
isConstructor
())
{
return
false
;
}
if
(
getParentClass
().
getAccessFlags
().
isEnum
())
{
if
(
mthArgs
.
size
()
>=
2
)
{
// TODO:
argsTypes
.
add
(
0
,
mthArgs
.
get
(
0
));
argsTypes
.
add
(
1
,
mthArgs
.
get
(
1
));
}
}
else
{
if
(!
mthArgs
.
isEmpty
())
{
// add synthetic arg for outer class
argsTypes
.
add
(
0
,
mthArgs
.
get
(
0
));
}
}
return
argsTypes
.
size
()
==
mthArgs
.
size
();
}
private
void
initArguments
(
List
<
ArgType
>
args
)
{
int
pos
;
if
(
noCode
)
{
...
...
@@ -687,6 +698,20 @@ public class MethodNode extends LineAttrNode implements ILoadable, ICodeNode {
ErrorsCounter
.
methodWarn
(
this
,
warnStr
);
}
public
void
addWarningComment
(
String
warn
)
{
addWarningComment
(
warn
,
null
);
}
public
void
addWarningComment
(
String
warn
,
@Nullable
Throwable
exc
)
{
String
commentStr
=
"JADX WARN: "
+
warn
;
addAttr
(
AType
.
COMMENTS
,
commentStr
);
if
(
exc
!=
null
)
{
LOG
.
warn
(
"{} in {}"
,
warn
,
this
,
exc
);
}
else
{
LOG
.
warn
(
"{} in {}"
,
warn
,
this
);
}
}
public
void
addComment
(
String
commentStr
)
{
addAttr
(
AType
.
COMMENTS
,
commentStr
);
LOG
.
info
(
"{} in {}"
,
commentStr
,
this
);
...
...
jadx-core/src/main/java/jadx/core/dex/nodes/parser/SignatureParser.java
浏览文件 @
00f5e835
...
...
@@ -292,6 +292,10 @@ public class SignatureParser {
return
sb
.
toString
();
}
public
String
getSignature
()
{
return
sign
;
}
private
String
debugString
()
{
if
(
pos
>=
sign
.
length
())
{
return
sign
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录