Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
ql04210214
jadx
提交
c7ed9857
J
jadx
项目概览
ql04210214
/
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 搜索 >>
提交
c7ed9857
编写于
4月 28, 2013
作者:
S
Skylot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Various code improvements
上级
a6f61151
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
46 addition
and
45 deletion
+46
-45
src/main/java/jadx/codegen/InsnGen.java
src/main/java/jadx/codegen/InsnGen.java
+9
-14
src/main/java/jadx/codegen/MethodGen.java
src/main/java/jadx/codegen/MethodGen.java
+30
-24
src/main/java/jadx/dex/trycatch/ExcHandlerAttr.java
src/main/java/jadx/dex/trycatch/ExcHandlerAttr.java
+3
-1
src/main/java/jadx/dex/trycatch/ExceptionHandler.java
src/main/java/jadx/dex/trycatch/ExceptionHandler.java
+3
-3
src/main/java/jadx/dex/trycatch/TryCatchBlock.java
src/main/java/jadx/dex/trycatch/TryCatchBlock.java
+1
-3
未找到文件。
src/main/java/jadx/codegen/InsnGen.java
浏览文件 @
c7ed9857
...
...
@@ -54,9 +54,6 @@ public class InsnGen {
NO_RESULT
,
BODY_ONLY
,
INC_INDENT
,
DEC_INDENT
,
}
public
InsnGen
(
MethodGen
mgen
,
MethodNode
mth
,
boolean
fallback
)
{
...
...
@@ -92,12 +89,12 @@ public class InsnGen {
if
(
insn
.
getAttributes
().
contains
(
AttributeType
.
DECLARE_VARIABLE
))
{
return
declareVar
(
arg
);
}
else
{
return
arg
(
arg
);
return
mgen
.
makeArgName
(
arg
);
}
}
catch
(
CodegenException
e
)
{
LOG
.
error
(
"Assign var codegen error"
,
e
);
return
"<error>"
;
}
return
"<error>"
;
}
public
String
declareVar
(
RegisterArg
arg
)
throws
CodegenException
{
...
...
@@ -142,11 +139,11 @@ public class InsnGen {
return
TypeGen
.
translate
(
mgen
.
getClassGen
(),
type
);
}
public
void
makeInsn
(
InsnNode
insn
,
CodeWriter
code
)
throws
CodegenException
{
makeInsn
(
insn
,
code
,
false
);
public
boolean
makeInsn
(
InsnNode
insn
,
CodeWriter
code
)
throws
CodegenException
{
return
makeInsn
(
insn
,
code
,
false
);
}
private
void
makeInsn
(
InsnNode
insn
,
CodeWriter
code
,
boolean
bodyOnly
)
throws
CodegenException
{
private
boolean
makeInsn
(
InsnNode
insn
,
CodeWriter
code
,
boolean
bodyOnly
)
throws
CodegenException
{
try
{
EnumSet
<
InsnGenState
>
state
=
EnumSet
.
noneOf
(
InsnGenState
.
class
);
if
(
bodyOnly
)
{
...
...
@@ -156,10 +153,8 @@ public class InsnGen {
CodeWriter
body
=
new
CodeWriter
(
code
.
getIndent
());
makeInsnBody
(
body
,
insn
,
state
);
if
(
state
.
contains
(
InsnGenState
.
SKIP
))
return
;
return
false
;
if
(
state
.
contains
(
InsnGenState
.
DEC_INDENT
))
code
.
decIndent
();
if
(
insn
.
getResult
()
!=
null
&&
!
state
.
contains
(
InsnGenState
.
NO_RESULT
))
code
.
startLine
(
assignVar
(
insn
)).
add
(
" = "
);
else
...
...
@@ -169,12 +164,11 @@ public class InsnGen {
if
(!
state
.
contains
(
InsnGenState
.
NO_SEMICOLON
))
code
.
add
(
';'
);
if
(
state
.
contains
(
InsnGenState
.
INC_INDENT
))
code
.
incIndent
();
}
}
catch
(
Throwable
th
)
{
throw
new
CodegenException
(
mth
,
"Error generate insn: "
+
insn
,
th
);
}
return
true
;
}
private
void
makeInsnBody
(
CodeWriter
code
,
InsnNode
insn
,
EnumSet
<
InsnGenState
>
state
)
throws
CodegenException
{
...
...
@@ -549,7 +543,7 @@ public class InsnGen {
private
void
addArgs
(
CodeWriter
code
,
InsnNode
insn
,
int
k
)
throws
CodegenException
{
code
.
add
(
'('
);
for
(
int
i
=
k
;
i
<
insn
.
getArgsCount
();
i
++)
{
code
.
add
(
arg
(
insn
.
getArg
(
i
)
));
code
.
add
(
arg
(
insn
,
i
));
if
(
i
<
insn
.
getArgsCount
()
-
1
)
code
.
add
(
", "
);
}
...
...
@@ -562,6 +556,7 @@ public class InsnGen {
if
(
op
==
ArithOp
.
INC
||
op
==
ArithOp
.
DEC
)
{
code
.
add
(
v1
+
op
.
getSymbol
());
state
.
add
(
InsnGenState
.
NO_RESULT
);
}
else
{
String
res
=
arg
(
insn
.
getResult
());
String
v2
=
arg
(
insn
.
getArg
(
1
));
...
...
src/main/java/jadx/codegen/MethodGen.java
浏览文件 @
c7ed9857
...
...
@@ -60,9 +60,9 @@ public class MethodGen {
if
(
mth
.
getMethodInfo
().
isClassInit
())
{
code
.
startLine
(
"static"
);
}
else
{
if
(
mth
.
getAttributes
().
contains
(
AttributeFlag
.
INCONSISTENT_CODE
)
)
{
code
.
startLine
(
"// FIXME: Jadx generate inconsistent code"
);
LOG
.
debug
(
ErrorsCounter
.
formatErrorMsg
(
mth
,
" Inconsistent code"
)
);
if
(
mth
.
getAttributes
().
contains
(
AttributeFlag
.
INCONSISTENT_CODE
)
&&
!
mth
.
getAttributes
().
contains
(
AttributeType
.
JADX_ERROR
))
{
code
.
startLine
(
"// jadx: inconsistent code"
);
}
annotationGen
.
addForMethod
(
code
,
mth
);
...
...
@@ -217,32 +217,24 @@ public class MethodGen {
code
.
add
(
"\");"
);
JadxErrorAttr
err
=
(
JadxErrorAttr
)
mth
.
getAttributes
().
get
(
AttributeType
.
JADX_ERROR
);
code
.
startLine
(
"//
FIXME: Jadx error processing method
"
);
code
.
startLine
(
"//
jadx: method processing error
"
);
Throwable
cause
=
err
.
getCause
();
if
(
cause
!=
null
)
{
code
.
endl
()
.
add
(
"/*"
)
;
code
.
startLine
(
"Message: "
).
add
(
cause
.
getMessage
()
);
code
.
endl
();
code
.
add
(
"/*"
);
code
.
startLine
(
"Error: "
).
add
(
Utils
.
getStackTrace
(
cause
));
code
.
add
(
"*/"
);
}
// load original instructions
try
{
mth
.
load
();
DepthTraverser
.
visit
(
new
FallbackModeVisitor
(),
mth
);
}
catch
(
DecodeException
e
)
{
// ignore
return
code
;
}
code
.
startLine
(
"/*"
);
makeFullMethodDump
(
code
,
mth
);
code
.
startLine
(
"*/"
);
makeMethodDump
(
code
,
mth
);
}
else
{
if
(
mth
.
getRegion
()
!=
null
)
{
CodeWriter
insns
=
new
CodeWriter
(
mthIndent
+
1
);
(
new
RegionGen
(
this
,
mth
)).
makeRegion
(
insns
,
mth
.
getRegion
());
if
(
mth
.
getAttributes
().
contains
(
AttributeFlag
.
INCONSISTENT_CODE
))
{
LOG
.
debug
(
ErrorsCounter
.
formatErrorMsg
(
mth
,
" Inconsistent code"
));
// makeMethodDump(code, mth);
}
makeInitCode
(
code
);
code
.
add
(
insns
);
}
else
{
...
...
@@ -252,7 +244,8 @@ public class MethodGen {
return
code
;
}
private
void
makeFullMethodDump
(
CodeWriter
code
,
MethodNode
mth
)
{
public
void
makeMethodDump
(
CodeWriter
code
,
MethodNode
mth
)
{
code
.
startLine
(
"/*"
);
getFallbackMethodGen
(
mth
).
addDefinition
(
code
);
code
.
add
(
" {"
);
code
.
incIndent
();
...
...
@@ -261,9 +254,21 @@ public class MethodGen {
code
.
decIndent
();
code
.
startLine
(
"}"
);
code
.
startLine
(
"*/"
);
}
private
void
makeFallbackMethod
(
CodeWriter
code
,
MethodNode
mth
)
{
if
(
mth
.
getInstructions
()
==
null
)
{
// load original instructions
try
{
mth
.
load
();
DepthTraverser
.
visit
(
new
FallbackModeVisitor
(),
mth
);
}
catch
(
DecodeException
e
)
{
// ignore
code
.
startLine
(
"Can't load method instructions"
);
return
;
}
}
if
(
mth
.
getThisArg
()
!=
null
)
{
code
.
startLine
(
getFallbackMethodGen
(
mth
).
makeArgName
(
mth
.
getThisArg
())).
add
(
" = this;"
);
}
...
...
@@ -283,13 +288,14 @@ public class MethodGen {
}
}
try
{
insnGen
.
makeInsn
(
insn
,
code
);
if
(
insnGen
.
makeInsn
(
insn
,
code
))
{
CatchAttr
_catch
=
(
CatchAttr
)
attrs
.
get
(
AttributeType
.
CATCH_BLOCK
);
if
(
_catch
!=
null
)
code
.
add
(
"\t //"
+
_catch
);
}
}
catch
(
CodegenException
e
)
{
code
.
startLine
(
"// error: "
+
insn
);
}
CatchAttr
_catch
=
(
CatchAttr
)
attrs
.
get
(
AttributeType
.
CATCH_BLOCK
);
if
(
_catch
!=
null
)
code
.
add
(
"\t // "
+
_catch
);
}
}
...
...
src/main/java/jadx/dex/trycatch/ExcHandlerAttr.java
浏览文件 @
c7ed9857
...
...
@@ -28,6 +28,8 @@ public class ExcHandlerAttr implements IAttribute {
@Override
public
String
toString
()
{
return
"ExcHandler: "
+
(
handler
.
isCatchAll
()
?
"all"
:
handler
.
getCatchType
());
return
"ExcHandler: "
+
(
handler
.
isCatchAll
()
?
"all"
:
handler
.
getCatchType
())
+
" "
+
handler
.
getArg
();
}
}
src/main/java/jadx/dex/trycatch/ExceptionHandler.java
浏览文件 @
c7ed9857
...
...
@@ -71,7 +71,7 @@ public class ExceptionHandler {
@Override
public
int
hashCode
()
{
return
31
*
(
catchType
==
null
?
0
:
catchType
.
hashCode
())
+
handleOffset
;
return
(
catchType
==
null
?
0
:
31
*
catchType
.
hashCode
())
+
handleOffset
;
}
@Override
...
...
@@ -88,8 +88,8 @@ public class ExceptionHandler {
@Override
public
String
toString
()
{
return
(
catchType
==
null
?
"all"
:
catchType
.
getShortName
())
+
" -> "
+
InsnUtils
.
formatOffset
(
handleOffset
);
return
(
catchType
==
null
?
"all"
:
catchType
.
getShortName
())
+
" -> "
+
InsnUtils
.
formatOffset
(
handleOffset
);
}
}
src/main/java/jadx/dex/trycatch/TryCatchBlock.java
浏览文件 @
c7ed9857
...
...
@@ -117,9 +117,7 @@ public class TryCatchBlock {
if
(
obj
==
null
)
return
false
;
if
(
getClass
()
!=
obj
.
getClass
())
return
false
;
TryCatchBlock
other
=
(
TryCatchBlock
)
obj
;
if
(
handlers
==
null
)
{
if
(
other
.
handlers
!=
null
)
return
false
;
}
else
if
(!
handlers
.
equals
(
other
.
handlers
))
return
false
;
if
(!
handlers
.
equals
(
other
.
handlers
))
return
false
;
return
true
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录