Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
极致猎手
jadx
提交
9645f33c
J
jadx
项目概览
极致猎手
/
jadx
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jadx
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9645f33c
编写于
4月 24, 2019
作者:
A
Ahmed Ashour
提交者:
skylot
4月 24, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: bitwise or/and with non-boolean (#628) (PR #629)
上级
336d6ce1
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
47 addition
and
9 deletion
+47
-9
jadx-core/src/main/java/jadx/core/dex/regions/conditions/IfCondition.java
...in/java/jadx/core/dex/regions/conditions/IfCondition.java
+12
-9
jadx-core/src/test/java/jadx/tests/integration/conditions/TestConditions17.java
...a/jadx/tests/integration/conditions/TestConditions17.java
+35
-0
未找到文件。
jadx-core/src/main/java/jadx/core/dex/regions/conditions/IfCondition.java
浏览文件 @
9645f33c
...
...
@@ -12,6 +12,7 @@ import jadx.core.dex.instructions.ArithNode;
import
jadx.core.dex.instructions.ArithOp
;
import
jadx.core.dex.instructions.IfNode
;
import
jadx.core.dex.instructions.IfOp
;
import
jadx.core.dex.instructions.args.ArgType
;
import
jadx.core.dex.instructions.args.InsnWrapArg
;
import
jadx.core.dex.instructions.args.LiteralArg
;
import
jadx.core.dex.instructions.args.RegisterArg
;
...
...
@@ -221,21 +222,23 @@ public final class IfCondition {
break
;
case
ARITH:
ArithOp
arithOp
=
((
ArithNode
)
wrapInsn
).
getOp
();
if
(
arithOp
==
ArithOp
.
OR
||
arithOp
==
ArithOp
.
AND
)
{
IfOp
ifOp
=
c
.
getInsn
().
getOp
();
boolean
isTrue
=
ifOp
==
IfOp
.
NE
&&
lit
==
0
if
(
c
.
getB
().
getType
()
==
ArgType
.
BOOLEAN
)
{
ArithOp
arithOp
=
((
ArithNode
)
wrapInsn
).
getOp
();
if
(
arithOp
==
ArithOp
.
OR
||
arithOp
==
ArithOp
.
AND
)
{
IfOp
ifOp
=
c
.
getInsn
().
getOp
();
boolean
isTrue
=
ifOp
==
IfOp
.
NE
&&
lit
==
0
||
ifOp
==
IfOp
.
EQ
&&
lit
==
1
;
IfOp
op
=
isTrue
?
IfOp
.
NE
:
IfOp
.
EQ
;
Mode
mode
=
isTrue
&&
arithOp
==
ArithOp
.
OR
||
IfOp
op
=
isTrue
?
IfOp
.
NE
:
IfOp
.
EQ
;
Mode
mode
=
isTrue
&&
arithOp
==
ArithOp
.
OR
||
!
isTrue
&&
arithOp
==
ArithOp
.
AND
?
Mode
.
OR
:
Mode
.
AND
;
IfNode
if1
=
new
IfNode
(
op
,
-
1
,
wrapInsn
.
getArg
(
0
),
LiteralArg
.
FALSE
);
IfNode
if2
=
new
IfNode
(
op
,
-
1
,
wrapInsn
.
getArg
(
1
),
LiteralArg
.
FALSE
);
return
new
IfCondition
(
mode
,
IfNode
if1
=
new
IfNode
(
op
,
-
1
,
wrapInsn
.
getArg
(
0
),
LiteralArg
.
FALSE
);
IfNode
if2
=
new
IfNode
(
op
,
-
1
,
wrapInsn
.
getArg
(
1
),
LiteralArg
.
FALSE
);
return
new
IfCondition
(
mode
,
Arrays
.
asList
(
new
IfCondition
(
new
Compare
(
if1
)),
new
IfCondition
(
new
Compare
(
if2
))));
}
}
break
;
...
...
jadx-core/src/test/java/jadx/tests/integration/conditions/TestConditions17.java
0 → 100644
浏览文件 @
9645f33c
package
jadx.tests.integration.conditions
;
import
static
jadx
.
tests
.
api
.
utils
.
JadxMatchers
.
containsOne
;
import
static
org
.
hamcrest
.
MatcherAssert
.
assertThat
;
import
org.junit.jupiter.api.Test
;
import
jadx.core.dex.nodes.ClassNode
;
import
jadx.tests.api.IntegrationTest
;
public
class
TestConditions17
extends
IntegrationTest
{
public
static
class
TestCls
{
public
static
final
int
SOMETHING
=
2
;
public
static
void
test
(
int
a
)
{
if
((
a
&
SOMETHING
)
!=
0
)
{
print
(
1
);
}
print
(
2
);
}
public
static
void
print
(
Object
o
)
{
}
}
@Test
public
void
test
()
{
ClassNode
cls
=
getClassNode
(
TestCls
.
class
);
String
code
=
cls
.
getCode
().
toString
();
assertThat
(
code
,
containsOne
(
" & "
));
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录