Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爽朗的琪琪
jadx
提交
d2e6bb23
J
jadx
项目概览
爽朗的琪琪
/
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 搜索 >>
未验证
提交
d2e6bb23
编写于
6月 16, 2022
作者:
S
Skylot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: use wide move for long/double store/load java opcodes
上级
eaeb1142
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
79 addition
and
20 deletion
+79
-20
jadx-core/src/test/java/jadx/tests/integration/types/TestTypeResolver22.java
...java/jadx/tests/integration/types/TestTypeResolver22.java
+29
-0
jadx-core/src/test/java/jadx/tests/integration/types/TestTypeResolver23.java
...java/jadx/tests/integration/types/TestTypeResolver23.java
+30
-0
jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/code/JavaInsnsRegister.java
.../jadx/plugins/input/java/data/code/JavaInsnsRegister.java
+20
-20
未找到文件。
jadx-core/src/test/java/jadx/tests/integration/types/TestTypeResolver22.java
0 → 100644
浏览文件 @
d2e6bb23
package
jadx.tests.integration.types
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
jadx.tests.api.IntegrationTest
;
import
jadx.tests.api.extensions.profiles.TestProfile
;
import
jadx.tests.api.extensions.profiles.TestWithProfiles
;
import
static
jadx
.
tests
.
api
.
utils
.
assertj
.
JadxAssertions
.
assertThat
;
public
class
TestTypeResolver22
extends
IntegrationTest
{
public
static
class
TestCls
{
public
void
test
(
InputStream
input
,
long
count
)
throws
IOException
{
long
pos
=
input
.
skip
(
count
);
while
(
pos
<
count
)
{
pos
+=
input
.
skip
(
count
-
pos
);
}
}
}
@TestWithProfiles
({
TestProfile
.
JAVA8
,
TestProfile
.
DX_J8
})
public
void
test
()
{
assertThat
(
getClassNode
(
TestCls
.
class
))
.
code
()
.
containsOne
(
"long pos = "
);
}
}
jadx-core/src/test/java/jadx/tests/integration/types/TestTypeResolver23.java
0 → 100644
浏览文件 @
d2e6bb23
package
jadx.tests.integration.types
;
import
jadx.tests.api.IntegrationTest
;
import
jadx.tests.api.extensions.profiles.TestProfile
;
import
jadx.tests.api.extensions.profiles.TestWithProfiles
;
import
static
jadx
.
tests
.
api
.
utils
.
assertj
.
JadxAssertions
.
assertThat
;
public
class
TestTypeResolver23
extends
IntegrationTest
{
public
static
class
TestCls
{
public
long
test
(
int
a
)
{
long
v
=
1L
;
if
(
a
==
2
)
{
v
=
2L
;
}
else
if
(
a
==
3
)
{
v
=
3L
;
}
System
.
out
.
println
(
v
);
return
v
;
}
}
@TestWithProfiles
({
TestProfile
.
JAVA8
,
TestProfile
.
DX_J8
})
public
void
test
()
{
assertThat
(
getClassNode
(
TestCls
.
class
))
.
code
()
.
containsOne
(
"long v"
);
}
}
jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/code/JavaInsnsRegister.java
浏览文件 @
d2e6bb23
...
...
@@ -59,9 +59,9 @@ public class JavaInsnsRegister {
loadConst
(
arr
,
0x14
,
"ldc2_w"
,
true
);
register
(
arr
,
0x15
,
"iload"
,
1
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
s
.
u1
()).
push
(
0
));
register
(
arr
,
0x16
,
"lload"
,
1
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
s
.
u1
()).
pushWide
(
0
));
register
(
arr
,
0x16
,
"lload"
,
1
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
local
(
1
,
s
.
u1
()).
pushWide
(
0
));
register
(
arr
,
0x17
,
"fload"
,
1
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
s
.
u1
()).
push
(
0
));
register
(
arr
,
0x18
,
"dload"
,
1
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
s
.
u1
()).
pushWide
(
0
));
register
(
arr
,
0x18
,
"dload"
,
1
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
local
(
1
,
s
.
u1
()).
pushWide
(
0
));
register
(
arr
,
0x19
,
"aload"
,
1
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
s
.
u1
()).
push
(
0
));
register
(
arr
,
0x1a
,
"iload_0"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
0
).
push
(
0
));
...
...
@@ -69,20 +69,20 @@ public class JavaInsnsRegister {
register
(
arr
,
0x1c
,
"iload_2"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
2
).
push
(
0
));
register
(
arr
,
0x1d
,
"iload_3"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
3
).
push
(
0
));
register
(
arr
,
0x1e
,
"lload_0"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
0
).
pushWide
(
0
));
register
(
arr
,
0x1f
,
"lload_1"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
1
).
pushWide
(
0
));
register
(
arr
,
0x20
,
"lload_2"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
2
).
pushWide
(
0
));
register
(
arr
,
0x21
,
"lload_3"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
3
).
pushWide
(
0
));
register
(
arr
,
0x1e
,
"lload_0"
,
0
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
local
(
1
,
0
).
pushWide
(
0
));
register
(
arr
,
0x1f
,
"lload_1"
,
0
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
local
(
1
,
1
).
pushWide
(
0
));
register
(
arr
,
0x20
,
"lload_2"
,
0
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
local
(
1
,
2
).
pushWide
(
0
));
register
(
arr
,
0x21
,
"lload_3"
,
0
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
local
(
1
,
3
).
pushWide
(
0
));
register
(
arr
,
0x22
,
"fload_0"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
0
).
push
(
0
));
register
(
arr
,
0x23
,
"fload_1"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
1
).
push
(
0
));
register
(
arr
,
0x24
,
"fload_2"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
2
).
push
(
0
));
register
(
arr
,
0x25
,
"fload_3"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
3
).
push
(
0
));
register
(
arr
,
0x26
,
"dload_0"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
0
).
pushWide
(
0
));
register
(
arr
,
0x27
,
"dload_1"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
1
).
pushWide
(
0
));
register
(
arr
,
0x28
,
"dload_2"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
2
).
pushWide
(
0
));
register
(
arr
,
0x29
,
"dload_3"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
3
).
pushWide
(
0
));
register
(
arr
,
0x26
,
"dload_0"
,
0
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
local
(
1
,
0
).
pushWide
(
0
));
register
(
arr
,
0x27
,
"dload_1"
,
0
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
local
(
1
,
1
).
pushWide
(
0
));
register
(
arr
,
0x28
,
"dload_2"
,
0
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
local
(
1
,
2
).
pushWide
(
0
));
register
(
arr
,
0x29
,
"dload_3"
,
0
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
local
(
1
,
3
).
pushWide
(
0
));
register
(
arr
,
0x2a
,
"aload_0"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
0
).
push
(
0
));
register
(
arr
,
0x2b
,
"aload_1"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
local
(
1
,
1
).
push
(
0
));
...
...
@@ -99,9 +99,9 @@ public class JavaInsnsRegister {
register
(
arr
,
0x35
,
"saload"
,
0
,
3
,
Opcode
.
AGET_SHORT
,
aget
());
register
(
arr
,
0x36
,
"istore"
,
1
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
s
.
u1
()));
register
(
arr
,
0x37
,
"lstore"
,
1
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
s
.
u1
()));
register
(
arr
,
0x37
,
"lstore"
,
1
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
pop
(
1
).
local
(
0
,
s
.
u1
()));
register
(
arr
,
0x38
,
"fstore"
,
1
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
s
.
u1
()));
register
(
arr
,
0x39
,
"dstore"
,
1
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
s
.
u1
()));
register
(
arr
,
0x39
,
"dstore"
,
1
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
pop
(
1
).
local
(
0
,
s
.
u1
()));
register
(
arr
,
0x3a
,
"astore"
,
1
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
s
.
u1
()));
register
(
arr
,
0x3b
,
"istore_0"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
0
));
...
...
@@ -109,20 +109,20 @@ public class JavaInsnsRegister {
register
(
arr
,
0x3d
,
"istore_2"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
2
));
register
(
arr
,
0x3e
,
"istore_3"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
3
));
register
(
arr
,
0x3f
,
"lstore_0"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
0
));
register
(
arr
,
0x40
,
"lstore_1"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
1
));
register
(
arr
,
0x41
,
"lstore_2"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
2
));
register
(
arr
,
0x42
,
"lstore_3"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
3
));
register
(
arr
,
0x3f
,
"lstore_0"
,
0
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
pop
(
1
).
local
(
0
,
0
));
register
(
arr
,
0x40
,
"lstore_1"
,
0
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
pop
(
1
).
local
(
0
,
1
));
register
(
arr
,
0x41
,
"lstore_2"
,
0
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
pop
(
1
).
local
(
0
,
2
));
register
(
arr
,
0x42
,
"lstore_3"
,
0
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
pop
(
1
).
local
(
0
,
3
));
register
(
arr
,
0x43
,
"fstore_0"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
0
));
register
(
arr
,
0x44
,
"fstore_1"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
1
));
register
(
arr
,
0x45
,
"fstore_2"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
2
));
register
(
arr
,
0x46
,
"fstore_3"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
3
));
register
(
arr
,
0x47
,
"dstore_0"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
0
));
register
(
arr
,
0x48
,
"dstore_1"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
1
));
register
(
arr
,
0x49
,
"dstore_2"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
2
));
register
(
arr
,
0x4a
,
"dstore_3"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
3
));
register
(
arr
,
0x47
,
"dstore_0"
,
0
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
pop
(
1
).
local
(
0
,
0
));
register
(
arr
,
0x48
,
"dstore_1"
,
0
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
pop
(
1
).
local
(
0
,
1
));
register
(
arr
,
0x49
,
"dstore_2"
,
0
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
pop
(
1
).
local
(
0
,
2
));
register
(
arr
,
0x4a
,
"dstore_3"
,
0
,
2
,
Opcode
.
MOVE
_WIDE
,
s
->
s
.
pop
(
1
).
local
(
0
,
3
));
register
(
arr
,
0x4b
,
"astore_0"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
0
));
register
(
arr
,
0x4c
,
"astore_1"
,
0
,
2
,
Opcode
.
MOVE
,
s
->
s
.
pop
(
1
).
local
(
0
,
1
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录