Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
ql04210214
jadx
提交
8a706193
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,发现更多精彩内容 >>
提交
8a706193
编写于
11月 03, 2014
作者:
S
Skylot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
core: fix indexed loop checks
上级
9d77f5f5
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
103 addition
and
2 deletion
+103
-2
jadx-core/src/main/java/jadx/core/dex/visitors/regions/LoopRegionVisitor.java
...ava/jadx/core/dex/visitors/regions/LoopRegionVisitor.java
+4
-2
jadx-core/src/test/java/jadx/tests/integration/arith/TestArith3.java
...rc/test/java/jadx/tests/integration/arith/TestArith3.java
+43
-0
jadx-core/src/test/java/jadx/tests/integration/variables/TestVariables5.java
...java/jadx/tests/integration/variables/TestVariables5.java
+56
-0
未找到文件。
jadx-core/src/main/java/jadx/core/dex/visitors/regions/LoopRegionVisitor.java
浏览文件 @
8a706193
...
...
@@ -104,8 +104,10 @@ public class LoopRegionVisitor extends AbstractVisitor implements IRegionVisitor
return
false
;
}
// can't make loop if argument from increment instruction is assign in loop
for
(
InsnArg
iArg
:
incrInsn
.
getArguments
())
{
if
(
iArg
.
isRegister
()
&&
assignOnlyInLoop
(
mth
,
loopRegion
,
(
RegisterArg
)
iArg
))
{
List
<
RegisterArg
>
args
=
new
LinkedList
<
RegisterArg
>();
incrInsn
.
getRegisterArgs
(
args
);
for
(
RegisterArg
iArg
:
args
)
{
if
(
assignOnlyInLoop
(
mth
,
loopRegion
,
(
RegisterArg
)
iArg
))
{
return
false
;
}
}
...
...
jadx-core/src/test/java/jadx/tests/integration/arith/TestArith3.java
0 → 100644
浏览文件 @
8a706193
package
jadx.tests.integration.arith
;
import
jadx.core.dex.nodes.ClassNode
;
import
jadx.tests.api.IntegrationTest
;
import
org.junit.Test
;
import
static
jadx
.
tests
.
api
.
utils
.
JadxMatchers
.
containsOne
;
import
static
org
.
hamcrest
.
CoreMatchers
.
containsString
;
import
static
org
.
hamcrest
.
CoreMatchers
.
not
;
import
static
org
.
junit
.
Assert
.
assertThat
;
public
class
TestArith3
extends
IntegrationTest
{
public
static
class
TestCls
{
private
int
vp
;
private
void
test
(
byte
[]
buffer
)
{
int
n
=
((
buffer
[
3
]
&
255
)
+
4
)
+
((
buffer
[
2
]
&
15
)
<<
8
);
while
(
n
+
4
<
buffer
.
length
)
{
int
c
=
buffer
[
n
]
&
255
;
int
p
=
(
buffer
[
n
+
2
]
&
255
)
+
((
buffer
[
n
+
1
]
&
31
)
<<
8
);
int
len
=
(
buffer
[
n
+
4
]
&
255
)
+
((
buffer
[
n
+
3
]
&
15
)
<<
8
);
switch
(
c
)
{
case
27
:
this
.
vp
=
p
;
break
;
}
n
+=
len
+
5
;
}
}
}
@Test
public
void
test
()
{
ClassNode
cls
=
getClassNode
(
TestCls
.
class
);
String
code
=
cls
.
getCode
().
toString
();
assertThat
(
code
,
containsOne
(
"while (n + 4 < buffer.length) {"
));
assertThat
(
code
,
containsOne
(
"n += len + 5;"
));
assertThat
(
code
,
not
(
containsString
(
"; n += len + 5) {"
)));
}
}
jadx-core/src/test/java/jadx/tests/integration/variables/TestVariables5.java
0 → 100644
浏览文件 @
8a706193
package
jadx.tests.integration.variables
;
import
jadx.core.dex.nodes.ClassNode
;
import
jadx.tests.api.IntegrationTest
;
import
org.junit.Test
;
import
static
jadx
.
tests
.
api
.
utils
.
JadxMatchers
.
containsOne
;
import
static
org
.
hamcrest
.
CoreMatchers
.
containsString
;
import
static
org
.
hamcrest
.
CoreMatchers
.
not
;
import
static
org
.
junit
.
Assert
.
assertThat
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
public
class
TestVariables5
extends
IntegrationTest
{
public
static
class
TestCls
{
public
String
f
=
"str//ing"
;
private
boolean
enabled
;
private
void
testIfInLoop
()
{
int
j
=
0
;
for
(
int
i
=
0
;
i
<
f
.
length
();
i
++)
{
char
ch
=
f
.
charAt
(
i
);
if
(
ch
==
'/'
)
{
j
++;
if
(
j
==
2
)
{
setEnabled
(
true
);
return
;
}
}
}
setEnabled
(
false
);
}
private
void
setEnabled
(
boolean
b
)
{
this
.
enabled
=
b
;
}
public
void
check
()
{
setEnabled
(
false
);
testIfInLoop
();
assertTrue
(
enabled
);
}
}
@Test
public
void
test
()
{
noDebugInfo
();
ClassNode
cls
=
getClassNode
(
TestCls
.
class
);
String
code
=
cls
.
getCode
().
toString
();
assertThat
(
code
,
not
(
containsString
(
"int i2++;"
)));
assertThat
(
code
,
containsOne
(
"int i = 0;"
));
assertThat
(
code
,
containsOne
(
"i++;"
));
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录