Skip to content

Commit ddd9f0f

Browse files
committed
update readme
1 parent 51c4b2f commit ddd9f0f

File tree

3 files changed

+206
-0
lines changed

3 files changed

+206
-0
lines changed

README.md

+102
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535

3636
## Introduction ([中文](/README_zh.md))
3737

38+
dexbox is a lightweight dex file parsing library.
39+
3840
If you want to know more, please refer to:
3941

4042
* [Documents](https://xmake.io/#/home)
@@ -52,6 +54,106 @@ XMake installed on the system. Available [here](https://github.com/xmake-io/xmak
5254
$ xmake
5355
```
5456

57+
## Run tests
58+
59+
```console
60+
$ xmake run dexdump tests/tests.dex
61+
.file _cast.java
62+
.class _cast
63+
.super Object
64+
.method public void <init>()
65+
.register 1
66+
.argument 1
67+
.catches 0
68+
.prologue
69+
0x000b0c: 7010 4e00 0000 |0000: invoke-direct {v0}, Object.<init>()void
70+
0x000b12: 0e00 |0003: return-void
71+
72+
.method public int main(java.lang.String[])
73+
.register 7
74+
.argument 1
75+
.catches 0
76+
.prologue
77+
0x000b24: 6200 0500 |0000: sget-object v0, System.out:PrintStream
78+
0x000b28: 1a01 a800 |0002: const-string v1, "test: ==============================================================="
79+
0x000b2c: 6e20 4800 1000 |0004: invoke-virtual {v0, v1}, PrintStream.println(String)void
80+
0x000b32: 6200 0500 |0007: sget-object v0, System.out:PrintStream
81+
0x000b36: 1a01 a900 |0009: const-string v1, "test: cast: .."
82+
0x000b3a: 6e20 4800 1000 |000b: invoke-virtual {v0, v1}, PrintStream.println(String)void
83+
0x000b40: 6200 0500 |000e: sget-object v0, System.out:PrintStream
84+
0x000b44: 1a01 0000 |0010: const-string v1, ""
85+
0x000b48: 6e20 4800 1000 |0012: invoke-virtual {v0, v1}, PrintStream.println(String)void
86+
0x000b4e: 12f0 |0015: const/4 v0, #-1 // #ff
87+
0x000b50: 8102 |0016: int-to-long v2, v0
88+
0x000b52: 6201 0500 |0017: sget-object v1, System.out:PrintStream
89+
0x000b56: 2204 2400 |0019: new-instance v4, StringBuilder
90+
0x000b5a: 7010 5100 0400 |001b: invoke-direct {v4}, StringBuilder.<init>()void
91+
0x000b60: 1a05 9d00 |001e: const-string v5, "num = "
92+
0x000b64: 6e20 5600 5400 |0020: invoke-virtual {v4, v5}, StringBuilder.append(String)StringBuilder
93+
0x000b6a: 0c04 |0023: move-result-object v4
94+
0x000b6c: 6e30 5500 2403 |0024: invoke-virtual {v4, v2, v3}, StringBuilder.append(long)StringBuilder
95+
0x000b72: 0c02 |0027: move-result-object v2
96+
0x000b74: 6e10 5700 0200 |0028: invoke-virtual {v2}, StringBuilder.toString()String
97+
0x000b7a: 0c02 |002b: move-result-object v2
98+
0x000b7c: 6e20 4800 2100 |002c: invoke-virtual {v1, v2}, PrintStream.println(String)void
99+
0x000b82: 8f01 |002f: int-to-short v1, v0
100+
0x000b84: 6202 0500 |0030: sget-object v2, System.out:PrintStream
101+
0x000b88: 2203 2400 |0032: new-instance v3, StringBuilder
102+
0x000b8c: 7010 5100 0300 |0034: invoke-direct {v3}, StringBuilder.<init>()void
103+
0x000b92: 1a04 9d00 |0037: const-string v4, "num = "
104+
0x000b96: 6e20 5600 4300 |0039: invoke-virtual {v3, v4}, StringBuilder.append(String)StringBuilder
105+
0x000b9c: 0c03 |003c: move-result-object v3
106+
0x000b9e: 6e20 5400 1300 |003d: invoke-virtual {v3, v1}, StringBuilder.append(int)StringBuilder
107+
0x000ba4: 0c01 |0040: move-result-object v1
108+
0x000ba6: 6e10 5700 0100 |0041: invoke-virtual {v1}, StringBuilder.toString()String
109+
0x000bac: 0c01 |0044: move-result-object v1
110+
0x000bae: 6e20 4800 1200 |0045: invoke-virtual {v2, v1}, PrintStream.println(String)void
111+
0x000bb4: 8e01 |0048: int-to-char v1, v0
112+
0x000bb6: 6202 0500 |0049: sget-object v2, System.out:PrintStream
113+
0x000bba: 2203 2400 |004b: new-instance v3, StringBuilder
114+
0x000bbe: 7010 5100 0300 |004d: invoke-direct {v3}, StringBuilder.<init>()void
115+
0x000bc4: 1a04 9d00 |0050: const-string v4, "num = "
116+
0x000bc8: 6e20 5600 4300 |0052: invoke-virtual {v3, v4}, StringBuilder.append(String)StringBuilder
117+
0x000bce: 0c03 |0055: move-result-object v3
118+
0x000bd0: 6e20 5400 1300 |0056: invoke-virtual {v3, v1}, StringBuilder.append(int)StringBuilder
119+
0x000bd6: 0c01 |0059: move-result-object v1
120+
0x000bd8: 6e10 5700 0100 |005a: invoke-virtual {v1}, StringBuilder.toString()String
121+
0x000bde: 0c01 |005d: move-result-object v1
122+
0x000be0: 6e20 4800 1200 |005e: invoke-virtual {v2, v1}, PrintStream.println(String)void
123+
0x000be6: 8d00 |0061: int-to-byte v0, v0
124+
0x000be8: 6201 0500 |0062: sget-object v1, System.out:PrintStream
125+
0x000bec: 2202 2400 |0064: new-instance v2, StringBuilder
126+
0x000bf0: 7010 5100 0200 |0066: invoke-direct {v2}, StringBuilder.<init>()void
127+
0x000bf6: 1a03 9d00 |0069: const-string v3, "num = "
128+
0x000bfa: 6e20 5600 3200 |006b: invoke-virtual {v2, v3}, StringBuilder.append(String)StringBuilder
129+
0x000c00: 0c02 |006e: move-result-object v2
130+
0x000c02: 6e20 5400 0200 |006f: invoke-virtual {v2, v0}, StringBuilder.append(int)StringBuilder
131+
0x000c08: 0c00 |0072: move-result-object v0
132+
0x000c0a: 6e10 5700 0000 |0073: invoke-virtual {v0}, StringBuilder.toString()String
133+
0x000c10: 0c00 |0076: move-result-object v0
134+
0x000c12: 6e20 4800 0100 |0077: invoke-virtual {v1, v0}, PrintStream.println(String)void
135+
0x000c18: 1600 ffff |007a: const-wide/16 v0, #-1 // #ffff
136+
0x000c1c: 6202 0500 |007c: sget-object v2, System.out:PrintStream
137+
0x000c20: 2203 2400 |007e: new-instance v3, StringBuilder
138+
0x000c24: 7010 5100 0300 |0080: invoke-direct {v3}, StringBuilder.<init>()void
139+
0x000c2a: 1a04 9d00 |0083: const-string v4, "num = "
140+
0x000c2e: 6e20 5600 4300 |0085: invoke-virtual {v3, v4}, StringBuilder.append(String)StringBuilder
141+
0x000c34: 0c03 |0088: move-result-object v3
142+
0x000c36: 8400 |0089: long-to-int v0, v0
143+
0x000c38: 6e20 5400 0300 |008a: invoke-virtual {v3, v0}, StringBuilder.append(int)StringBuilder
144+
0x000c3e: 0c00 |008d: move-result-object v0
145+
0x000c40: 6e10 5700 0000 |008e: invoke-virtual {v0}, StringBuilder.toString()String
146+
0x000c46: 0c00 |0091: move-result-object v0
147+
0x000c48: 6e20 4800 0200 |0092: invoke-virtual {v2, v0}, PrintStream.println(String)void
148+
0x000c4e: 6200 0500 |0095: sget-object v0, System.out:PrintStream
149+
0x000c52: 1a01 0000 |0097: const-string v1, ""
150+
0x000c56: 6e20 4800 1000 |0099: invoke-virtual {v0, v1}, PrintStream.println(String)void
151+
0x000c5c: 6200 0500 |009c: sget-object v0, System.out:PrintStream
152+
0x000c60: 1a01 aa00 |009e: const-string v1, "test: cast: ok"
153+
0x000c64: 6e20 4800 1000 |00a0: invoke-virtual {v0, v1}, PrintStream.println(String)void
154+
0x000c6a: 1200 |00a3: const/4 v0, #0 // #0
155+
0x000c6c: 0f00 |00a4: return v0
156+
```
55157

56158
## Contacts
57159

README_zh.md

+103
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636

3737
## 简介
3838

39+
dexbox是一个轻量的基于c语言的dex文件解析库。
40+
3941
如果你想要了解更多,请参考:
4042

4143
* [在线文档](https://xmake.io/#/zh-cn/getting_started)
@@ -53,6 +55,107 @@
5355
$ xmake
5456
```
5557

58+
## 运行测试
59+
60+
```console
61+
$ xmake run dexdump tests/tests.dex
62+
.file _cast.java
63+
.class _cast
64+
.super Object
65+
.method public void <init>()
66+
.register 1
67+
.argument 1
68+
.catches 0
69+
.prologue
70+
0x000b0c: 7010 4e00 0000 |0000: invoke-direct {v0}, Object.<init>()void
71+
0x000b12: 0e00 |0003: return-void
72+
73+
.method public int main(java.lang.String[])
74+
.register 7
75+
.argument 1
76+
.catches 0
77+
.prologue
78+
0x000b24: 6200 0500 |0000: sget-object v0, System.out:PrintStream
79+
0x000b28: 1a01 a800 |0002: const-string v1, "test: ==============================================================="
80+
0x000b2c: 6e20 4800 1000 |0004: invoke-virtual {v0, v1}, PrintStream.println(String)void
81+
0x000b32: 6200 0500 |0007: sget-object v0, System.out:PrintStream
82+
0x000b36: 1a01 a900 |0009: const-string v1, "test: cast: .."
83+
0x000b3a: 6e20 4800 1000 |000b: invoke-virtual {v0, v1}, PrintStream.println(String)void
84+
0x000b40: 6200 0500 |000e: sget-object v0, System.out:PrintStream
85+
0x000b44: 1a01 0000 |0010: const-string v1, ""
86+
0x000b48: 6e20 4800 1000 |0012: invoke-virtual {v0, v1}, PrintStream.println(String)void
87+
0x000b4e: 12f0 |0015: const/4 v0, #-1 // #ff
88+
0x000b50: 8102 |0016: int-to-long v2, v0
89+
0x000b52: 6201 0500 |0017: sget-object v1, System.out:PrintStream
90+
0x000b56: 2204 2400 |0019: new-instance v4, StringBuilder
91+
0x000b5a: 7010 5100 0400 |001b: invoke-direct {v4}, StringBuilder.<init>()void
92+
0x000b60: 1a05 9d00 |001e: const-string v5, "num = "
93+
0x000b64: 6e20 5600 5400 |0020: invoke-virtual {v4, v5}, StringBuilder.append(String)StringBuilder
94+
0x000b6a: 0c04 |0023: move-result-object v4
95+
0x000b6c: 6e30 5500 2403 |0024: invoke-virtual {v4, v2, v3}, StringBuilder.append(long)StringBuilder
96+
0x000b72: 0c02 |0027: move-result-object v2
97+
0x000b74: 6e10 5700 0200 |0028: invoke-virtual {v2}, StringBuilder.toString()String
98+
0x000b7a: 0c02 |002b: move-result-object v2
99+
0x000b7c: 6e20 4800 2100 |002c: invoke-virtual {v1, v2}, PrintStream.println(String)void
100+
0x000b82: 8f01 |002f: int-to-short v1, v0
101+
0x000b84: 6202 0500 |0030: sget-object v2, System.out:PrintStream
102+
0x000b88: 2203 2400 |0032: new-instance v3, StringBuilder
103+
0x000b8c: 7010 5100 0300 |0034: invoke-direct {v3}, StringBuilder.<init>()void
104+
0x000b92: 1a04 9d00 |0037: const-string v4, "num = "
105+
0x000b96: 6e20 5600 4300 |0039: invoke-virtual {v3, v4}, StringBuilder.append(String)StringBuilder
106+
0x000b9c: 0c03 |003c: move-result-object v3
107+
0x000b9e: 6e20 5400 1300 |003d: invoke-virtual {v3, v1}, StringBuilder.append(int)StringBuilder
108+
0x000ba4: 0c01 |0040: move-result-object v1
109+
0x000ba6: 6e10 5700 0100 |0041: invoke-virtual {v1}, StringBuilder.toString()String
110+
0x000bac: 0c01 |0044: move-result-object v1
111+
0x000bae: 6e20 4800 1200 |0045: invoke-virtual {v2, v1}, PrintStream.println(String)void
112+
0x000bb4: 8e01 |0048: int-to-char v1, v0
113+
0x000bb6: 6202 0500 |0049: sget-object v2, System.out:PrintStream
114+
0x000bba: 2203 2400 |004b: new-instance v3, StringBuilder
115+
0x000bbe: 7010 5100 0300 |004d: invoke-direct {v3}, StringBuilder.<init>()void
116+
0x000bc4: 1a04 9d00 |0050: const-string v4, "num = "
117+
0x000bc8: 6e20 5600 4300 |0052: invoke-virtual {v3, v4}, StringBuilder.append(String)StringBuilder
118+
0x000bce: 0c03 |0055: move-result-object v3
119+
0x000bd0: 6e20 5400 1300 |0056: invoke-virtual {v3, v1}, StringBuilder.append(int)StringBuilder
120+
0x000bd6: 0c01 |0059: move-result-object v1
121+
0x000bd8: 6e10 5700 0100 |005a: invoke-virtual {v1}, StringBuilder.toString()String
122+
0x000bde: 0c01 |005d: move-result-object v1
123+
0x000be0: 6e20 4800 1200 |005e: invoke-virtual {v2, v1}, PrintStream.println(String)void
124+
0x000be6: 8d00 |0061: int-to-byte v0, v0
125+
0x000be8: 6201 0500 |0062: sget-object v1, System.out:PrintStream
126+
0x000bec: 2202 2400 |0064: new-instance v2, StringBuilder
127+
0x000bf0: 7010 5100 0200 |0066: invoke-direct {v2}, StringBuilder.<init>()void
128+
0x000bf6: 1a03 9d00 |0069: const-string v3, "num = "
129+
0x000bfa: 6e20 5600 3200 |006b: invoke-virtual {v2, v3}, StringBuilder.append(String)StringBuilder
130+
0x000c00: 0c02 |006e: move-result-object v2
131+
0x000c02: 6e20 5400 0200 |006f: invoke-virtual {v2, v0}, StringBuilder.append(int)StringBuilder
132+
0x000c08: 0c00 |0072: move-result-object v0
133+
0x000c0a: 6e10 5700 0000 |0073: invoke-virtual {v0}, StringBuilder.toString()String
134+
0x000c10: 0c00 |0076: move-result-object v0
135+
0x000c12: 6e20 4800 0100 |0077: invoke-virtual {v1, v0}, PrintStream.println(String)void
136+
0x000c18: 1600 ffff |007a: const-wide/16 v0, #-1 // #ffff
137+
0x000c1c: 6202 0500 |007c: sget-object v2, System.out:PrintStream
138+
0x000c20: 2203 2400 |007e: new-instance v3, StringBuilder
139+
0x000c24: 7010 5100 0300 |0080: invoke-direct {v3}, StringBuilder.<init>()void
140+
0x000c2a: 1a04 9d00 |0083: const-string v4, "num = "
141+
0x000c2e: 6e20 5600 4300 |0085: invoke-virtual {v3, v4}, StringBuilder.append(String)StringBuilder
142+
0x000c34: 0c03 |0088: move-result-object v3
143+
0x000c36: 8400 |0089: long-to-int v0, v0
144+
0x000c38: 6e20 5400 0300 |008a: invoke-virtual {v3, v0}, StringBuilder.append(int)StringBuilder
145+
0x000c3e: 0c00 |008d: move-result-object v0
146+
0x000c40: 6e10 5700 0000 |008e: invoke-virtual {v0}, StringBuilder.toString()String
147+
0x000c46: 0c00 |0091: move-result-object v0
148+
0x000c48: 6e20 4800 0200 |0092: invoke-virtual {v2, v0}, PrintStream.println(String)void
149+
0x000c4e: 6200 0500 |0095: sget-object v0, System.out:PrintStream
150+
0x000c52: 1a01 0000 |0097: const-string v1, ""
151+
0x000c56: 6e20 4800 1000 |0099: invoke-virtual {v0, v1}, PrintStream.println(String)void
152+
0x000c5c: 6200 0500 |009c: sget-object v0, System.out:PrintStream
153+
0x000c60: 1a01 aa00 |009e: const-string v1, "test: cast: ok"
154+
0x000c64: 6e20 4800 1000 |00a0: invoke-virtual {v0, v1}, PrintStream.println(String)void
155+
0x000c6a: 1200 |00a3: const/4 v0, #0 // #0
156+
0x000c6c: 0f00 |00a4: return v0
157+
```
158+
56159
## 联系方式
57160

58161

scripts/opcode-gen/bytecode.txt

+1
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ op e2 ushr-int/lit8 22b y none continue
313313
#
314314
# Optimized opcodes (not valid in an unoptimized dex file)
315315
#
316+
# TODO op e3-f2 has been changed, we need update them. @see https://cs.android.com/android/platform/superproject/+/master:art/libdexfile/dex/dex_instruction_list.h
316317

317318
op e3 +iget-volatile 22c y field-ref optimized|continue|throw
318319
op e4 +iput-volatile 22c n field-ref optimized|continue|throw

0 commit comments

Comments
 (0)