1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
|
#define _CRT_SECURE_NO_WARNINGS 0
#include <iostream>
#include <stack>
using namespace std;
// 定义指令列表,存储虚拟机的指令
//unsigned char intr_list[] = { 246, 0, 0, 0, 108, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, ... };
unsigned char intr_list[] = {
246, 0, 0, 0, 108, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 71, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 13, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 5, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 19, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 10, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 70, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 2, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 9, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 9, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 1, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 74, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 21, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 3, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 18, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 19, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 8, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 15, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 11, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 70, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 3, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 3, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 20, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0,
246, 0, 0, 0, 14, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 18, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 70, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 20, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 9, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 70, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 2, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 3, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 21, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 21, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 3, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 20, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 22, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 70, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 2, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 20, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 7, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 14, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 70, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 3, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 4, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 70, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 10, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 10, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 15, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 17, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 70, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 19, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 9, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 31, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 70, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 74, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 31, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 10, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 18, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 5, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 3, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 20, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 20, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 9, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 5, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 8, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 15, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 70, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 1, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 7, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 10, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 70, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 3, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 14, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 18, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 70, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 20, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 3, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 17, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 21, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 8, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 7, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 70, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 19, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 9, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 31, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 70, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 246, 0, 0, 0, 47, 0, 0, 0, 246, 0, 0, 0, 102, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 243, 0, 0, 0, 17, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 247, 0, 0, 0, 244, 0, 0, 0, 77, 105, 78, 105, 1, 0, 0, 0, 76, 45, 99, 116, 244, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 242, 0, 0, 0, 15, 68, 45, 29, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 22, 0, 0, 0, 1, 0, 0, 0, 33, 0, 0, 0, 244, 0, 0, 0, 20, 69, 17, 0, 243, 0, 0, 0, 242, 0, 0, 0, 80, 114, 116, 116, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 44, 0, 0, 0, 244, 0, 0, 0, 40, 138, 34, 0, 243, 0, 0, 0, 242, 0, 0, 0, 77, 138, 34, 0, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 44, 0, 0, 0, 1, 0, 0, 0, 11, 0, 0, 0, 244, 0, 0, 0, 60, 207, 51, 0, 243, 0, 0, 0, 242, 0, 0, 0, 170, 207, 51, 0, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 11, 0, 0, 0, 1, 0, 0, 0, 22, 0, 0, 0, 244, 0, 0, 0, 80, 20, 69, 0, 243, 0, 0, 0, 242, 0, 0, 0, 203, 20, 69, 0, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 22, 0, 0, 0, 1, 0, 0, 0, 33, 0, 0, 0, 244, 0, 0, 0, 100, 89, 86, 0, 243, 0, 0, 0, 242, 0, 0, 0, 102, 89, 86, 0, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 44, 0, 0, 0, 244, 0, 0, 0, 120, 158, 103, 0, 243, 0, 0, 0, 242, 0, 0, 0, 188, 159, 103, 0, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 44, 0, 0, 0, 1, 0, 0, 0, 11, 0, 0, 0, 244, 0, 0, 0, 140, 227, 120, 0, 243, 0, 0, 0, 242, 0, 0, 0, 204, 228, 120, 0, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 11, 0, 0, 0, 1, 0, 0, 0, 22, 0, 0, 0, 244, 0, 0, 0, 160, 40, 138, 0, 243, 0, 0, 0, 242, 0, 0, 0, 73, 41, 138, 0, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 22, 0, 0, 0, 1, 0, 0, 0, 33, 0, 0, 0, 244, 0, 0, 0, 180, 109, 155, 0, 243, 0, 0, 0, 242, 0, 0, 0, 200, 110, 155, 0, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 44, 0, 0, 0, 244, 0, 0, 0, 200, 178, 172, 0, 243, 0, 0, 0, 242, 0, 0, 0, 224, 179, 172, 0, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 44, 0, 0, 0, 1, 0, 0, 0, 11, 0, 0, 0, 244, 0, 0, 0, 220, 247, 189, 0, 243, 0, 0, 0, 242, 0, 0, 0, 246, 248, 189, 0, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 11, 0, 0, 0, 1, 0, 0, 0, 22, 0, 0, 0, 244, 0, 0, 0, 240, 60, 207, 0, 243, 0, 0, 0, 242, 0, 0, 0, 34, 61, 207, 0, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 22, 0, 0, 0, 1, 0, 0, 0, 33, 0, 0, 0, 244, 0, 0, 0, 4, 130, 224, 0, 243, 0, 0, 0, 242, 0, 0, 0, 235, 130, 224, 0, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 44, 0, 0, 0, 244, 0, 0, 0, 24, 199, 241, 0, 243, 0, 0, 0, 242, 0, 0, 0, 69, 199, 241, 0, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 44, 0, 0, 0, 1, 0, 0, 0, 11, 0, 0, 0, 244, 0, 0, 0, 44, 12, 3, 1, 243, 0, 0, 0, 242, 0, 0, 0, 156, 12, 3, 1, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 11, 0, 0, 0, 1, 0, 0, 0, 22, 0, 0, 0, 244, 0, 0, 0, 64, 81, 20, 1, 243, 0, 0, 0, 242, 0, 0, 0, 142, 81, 20, 1, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 22, 0, 0, 0, 1, 0, 0, 0, 33, 0, 0, 0, 244, 0, 0, 0, 84, 150, 37, 1, 243, 0, 0, 0, 242, 0, 0, 0, 52, 150, 37, 1, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 44, 0, 0, 0, 244, 0, 0, 0, 104, 219, 54, 1, 243, 0, 0, 0, 242, 0, 0, 0, 156, 220, 54, 1, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 44, 0, 0, 0, 1, 0, 0, 0, 11, 0, 0, 0, 244, 0, 0, 0, 124, 32, 72, 1, 243, 0, 0, 0, 242, 0, 0, 0, 125, 33, 72, 1, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 11, 0, 0, 0, 1, 0, 0, 0, 22, 0, 0, 0, 244, 0, 0, 0, 144, 101, 89, 1, 243, 0, 0, 0, 242, 0, 0, 0, 174, 101, 89, 1, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 22, 0, 0, 0, 1, 0, 0, 0, 33, 0, 0, 0, 244, 0, 0, 0, 164, 170, 106, 1, 243, 0, 0, 0, 242, 0, 0, 0, 184, 171, 106, 1, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 44, 0, 0, 0, 244, 0, 0, 0, 184, 239, 123, 1, 243, 0, 0, 0, 242, 0, 0, 0, 47, 240, 123, 1, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 44, 0, 0, 0, 1, 0, 0, 0, 11, 0, 0, 0, 244, 0, 0, 0, 204, 52, 141, 1, 243, 0, 0, 0, 242, 0, 0, 0, 42, 53, 141, 1, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 11, 0, 0, 0, 1, 0, 0, 0, 22, 0, 0, 0, 244, 0, 0, 0, 224, 121, 158, 1, 243, 0, 0, 0, 242, 0, 0, 0, 231, 122, 158, 1, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 22, 0, 0, 0, 1, 0, 0, 0, 33, 0, 0, 0, 244, 0, 0, 0, 244, 190, 175, 1, 243, 0, 0, 0, 242, 0, 0, 0, 25, 191, 175, 1, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 44, 0, 0, 0, 244, 0, 0, 0, 8, 4, 193, 1, 243, 0, 0, 0, 242, 0, 0, 0, 60, 4, 193, 1, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 44, 0, 0, 0, 1, 0, 0, 0, 11, 0, 0, 0, 244, 0, 0, 0, 28, 73, 210, 1, 243, 0, 0, 0, 242, 0, 0, 0, 164, 73, 210, 1, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 11, 0, 0, 0, 1, 0, 0, 0, 22, 0, 0, 0, 244, 0, 0, 0, 48, 142, 227, 1, 243, 0, 0, 0, 242, 0, 0, 0, 62, 142, 227, 1, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 22, 0, 0, 0, 1, 0, 0, 0, 33, 0, 0, 0, 244, 0, 0, 0, 68, 211, 244, 1, 243, 0, 0, 0, 242, 0, 0, 0, 176, 211, 244, 1, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 44, 0, 0, 0, 244, 0, 0, 0, 88, 24, 6, 2, 243, 0, 0, 0, 242, 0, 0, 0, 83, 24, 6, 2, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 44, 0, 0, 0, 1, 0, 0, 0, 11, 0, 0, 0, 244, 0, 0, 0, 108, 93, 23, 2, 243, 0, 0, 0, 242, 0, 0, 0, 118, 94, 23, 2, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 11, 0, 0, 0, 1, 0, 0, 0, 22, 0, 0, 0, 244, 0, 0, 0, 128, 162, 40, 2, 243, 0, 0, 0, 242, 0, 0, 0, 65, 162, 40, 2, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 22, 0, 0, 0, 1, 0, 0, 0, 33, 0, 0, 0, 244, 0, 0, 0, 148, 231, 57, 2, 243, 0, 0, 0, 242, 0, 0, 0, 102, 232, 57, 2, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 44, 0, 0, 0, 244, 0, 0, 0, 168, 44, 75, 2, 243, 0, 0, 0, 242, 0, 0, 0, 129, 45, 75, 2, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 44, 0, 0, 0, 1, 0, 0, 0, 11, 0, 0, 0, 244, 0, 0, 0, 188, 113, 92, 2, 243, 0, 0, 0, 242, 0, 0, 0, 240, 114, 92, 2, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 11, 0, 0, 0, 1, 0, 0, 0, 22, 0, 0, 0, 244, 0, 0, 0, 208, 182, 109, 2, 243, 0, 0, 0, 242, 0, 0, 0, 56, 183, 109, 2, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 22, 0, 0, 0, 1, 0, 0, 0, 33, 0, 0, 0, 244, 0, 0, 0, 228, 251, 126, 2, 243, 0, 0, 0, 242, 0, 0, 0, 252, 252, 126, 2, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 44, 0, 0, 0, 244, 0, 0, 0, 248, 64, 144, 2, 243, 0, 0, 0, 242, 0, 0, 0, 241, 65, 144, 2, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 44, 0, 0, 0, 1, 0, 0, 0, 11, 0, 0, 0, 244, 0, 0, 0, 12, 134, 161, 2, 243, 0, 0, 0, 242, 0, 0, 0, 231, 134, 161, 2, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 11, 0, 0, 0, 1, 0, 0, 0, 22, 0, 0, 0, 244, 0, 0, 0, 32, 203, 178, 2, 243, 0, 0, 0, 242, 0, 0, 0, 227, 203, 178, 2, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 22, 0, 0, 0, 1, 0, 0, 0, 33, 0, 0, 0, 244, 0, 0, 0, 52, 16, 196, 2, 243, 0, 0, 0, 242, 0, 0, 0, 93, 16, 196, 2, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 44, 0, 0, 0, 244, 0, 0, 0, 72, 85, 213, 2, 243, 0, 0, 0, 242, 0, 0, 0, 149, 85, 213, 2, 254, 0, 0, 0, 102, 0, 0, 0, 240, 0, 0, 0, 16, 0, 0, 0, 248, 0, 0, 0, 244, 0, 0, 0, 44, 0, 0, 0, 1, 0, 0, 0, 11, 0, 0, 0, 244, 0, 0, 0, 92, 154, 230, 2, 243, 0, 0, 0, 242, 0, 0, 0, 123, 154, 230, 2, 254, 0, 0, 0, 102, 0, 0, 0, 240,
};
// 定义答案数组,存储可能的输入值
unsigned char ans[0x1000];
// 当前答案数组的索引
int ans_i;
// 指令列表的起始索引,0xb40 / 4 是将地址 0xb40 转换为指令索引
int idx = 0xb40 / 4;
// 定义一个栈,用于存储中间值
stack<int> s;
// 检查当前答案数组是否满足虚拟机的指令逻辑
int check()
{
unsigned char tmp;
// 当前指令索引
int now_idx = idx;
// 当前答案数组的索引
int now_ans_i = 0;
// 将指令列表转换为 int 类型的指针,方便访问
int* intr_list_i = (int*)intr_list;
// 定义一些变量,用于存储中间值
int p1 = 0, p2 = 0, p3 = 0, p4 = 0;
// 标志位,用于控制条件跳转
int flag = 0;
// 清空栈
while (!s.empty())
s.pop();
// 遍历指令列表,直到遇到终止指令(值为 0)
while (intr_list_i[now_idx] != 0) {
// 根据指令类型执行不同的操作
switch (intr_list_i[now_idx]) {
case 1:
// 将 p2 的值加上指令中的值
p2 += intr_list_i[now_idx + 1];
// 跳过指令中的值
now_idx += 2;
break;
case 16:
// 从答案数组中读取一个字符并压入栈
tmp = ans[now_ans_i++];
s.push(tmp);
now_idx += 1;
break;
case 17:
// 打印 p1 的值
printf("%c", p1);
now_idx += 1;
break;
case 240:
// 将 p2 的值赋给 p1
p1 = p2;
now_idx += 1;
break;
case 241:
// 将 p2 的值赋给 p4
p4 = p2;
now_idx += 1;
break;
case 242:
// 比较 p1 和指令中的值
if (p1 == intr_list_i[now_idx + 1]) {
flag = 1; // 如果相等,设置标志位
if (now_ans_i == ans_i) // 如果答案数组已全部处理
return 1; // 返回 1,表示验证通过
}
else {
flag = 0; // 如果不相等,清除标志位
}
now_idx += 2;
break;
case 243:
// 将 p1 和 p2 进行异或操作
p1 ^= p2;
now_idx += 1;
break;
case 244:
// 将 p1 的值加上指令中的值
p1 += intr_list_i[now_idx + 1];
now_idx += 2;
break;
case 245:
// 从指令中读取两个值,进行减法操作
intr_list_i[now_idx + 1] -= intr_list_i[now_idx + 2];
now_idx += 3;
break;
case 246:
// 将指令中的值压入栈
s.push(intr_list_i[now_idx + 1]);
now_idx += 2;
break;
case 247:
// 从栈中弹出一个值赋给 p1
p1 = s.top();
s.pop();
now_idx += 1;
break;
case 248:
// 从栈中弹出一个值赋给 p2
p2 = s.top();
s.pop();
now_idx += 1;
break;
case 249:
// 从栈中弹出一个值赋给 p3
p3 = s.top();
s.pop();
now_idx += 1;
break;
case 250:
// 从栈中弹出一个值赋给 p4
p4 = s.top();
s.pop();
now_idx += 1;
break;
case 254:
// 如果标志位为 0,返回 0,表示验证失败
if (flag == 0) {
return 0;
}
now_idx += 2;
break;
case 255:
// 条件跳转,如果标志位为 1,则跳过指令中的值
if (flag)
now_idx += intr_list_i[now_idx + 1];
now_idx += 2;
break;
default:
break;
}
}
return 1; // 如果所有指令都执行完毕,返回 1,表示验证通过
}
// 深度优先搜索函数,用于穷举所有可能的输入值
int dfs() {
ans_i++; // 增加答案数组的索引
for (unsigned char ch = 0; ch <= 0x7f; ch++) { // 遍历所有可能的字符值
ans[ans_i - 1] = ch; // 将当前字符值赋给答案数组
if (check()) { // 调用 check 函数验证当前答案数组是否满足条件
if (ans_i == 45 || dfs()) // 如果答案数组长度达到 45 或递归调用 dfs 返回 1
return 1; // 返回 1,表示找到解
}
}
ans_i--; // 回溯,减少答案数组的索引
return 0; // 返回 0,表示当前路径无法找到解
}
// 深度优先搜索的初始化函数
void dfs_init() {
ans_i = 2; // 初始化答案数组的索引为 2
for (unsigned char ch1 = 0; ch1 <= 0x7f; ch1++) { // 遍历 ans[0] 的所有可能值
for (unsigned char ch2 = 0; ch2 <= 0x7f; ch2++) { // 遍历 ans[1] 的所有可能值
ans[0] = ch1; // 将当前值赋给 ans[0]
ans[1] = ch2; // 将当前值赋给 ans[1]
if (check() && dfs()) { // 调用 check 函数验证当前答案数组是否满足条件,并递归调用 dfs
cout << ans << endl; // 如果找到解,打印答案数组
return; // 退出函数
}
}
}
}
// 主函数
int main() {
setbuf(stdout, 0); // 禁用输出缓冲
dfs_init(); // 调用初始化函数启动深度优先搜索
return 0;
}
|