1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import random, string
20 import opaque
21
22 REIL_TYPE_REGISTER = 0
23 REIL_TYPE_LITERAL = 1
24 REIL_TYPE_OFFSET = 2
25
27 - def __init__(self, name, size=4, value=0) :
28 self.__name = name
29 self.__size = size
30 self.__type = REIL_TYPE_REGISTER
31 self.__value = value
32
35
38
41
44
46 return "%s (%d)" % (self.__name, self.__size)
47
53
56
59
62
64 return "0x%x (%d)" % (self.__value, self.__size)
65
71
74
77
80
82 return "0x%x (%d)" % (self.__value, self.__size)
83
86 l = []
87
88 if isinstance( self.rcv0, REIL_REGISTER ) :
89 l.append( self.rcv0 )
90
91
92 if isinstance( self.rcv1, REIL_REGISTER ) :
93 l.append( self.rcv1 )
94
95 if isinstance( self.rcvout, REIL_REGISTER ) :
96 l.append( self.rcvout )
97
98 return l
99
102
105
107 if self.rcv0 == None and self.rcv1 == None and self.rcvout == None :
108 print "%s ( , , , )" % (self.name)
109 elif self.rcv1 == None :
110 print "%s ( %s, , %s )" % (self.name, self.rcv0.get_str(), self.rcvout.get_str())
111 else :
112 print "%s ( %s, %s, %s )" % (self.name, self.rcv0.get_str(), self.rcv1.get_str(), self.rcvout.get_str())
113
115 - def __init__(self, rcv0, rcv1, rcvout) :
116 self.name = "ADD"
117
118 self.rcv0 = rcv0
119 self.rcv1 = rcv1
120 self.rcvout = rcvout
121
123 - def __init__(self, rcv0, rcv1, rcvout) :
124 self.name = "AND"
125
126 self.rcv0 = rcv0
127 self.rcv1 = rcv1
128 self.rcvout = rcvout
129
132 self.name = "BISZ"
133
134 self.rcv0 = rcv0
135 self.rcv1 = None
136 self.rcvout = rcvout
137
139 - def __init__(self, rcv0, rcv1, rcvout) :
140 self.name = "BRSH"
141
142 self.rcv0 = rcv0
143 self.rcv1 = rcv1
144 self.rcvout = rcvout
145
147 - def __init__(self, rcv0, rcv1, rcvout) :
148 self.name = "BLSH"
149
150 self.rcv0 = rcv0
151 self.rcv1 = rcv1
152 self.rcvout = rcvout
153
155 - def __init__(self, rcv0, rcv1, rcvout) :
156 self.name = "DIV"
157
158 raise("OOPS")
159
162 self.name = "JCC"
163
164 self.rcv0 = rcv0
165 self.rcv1 = None
166 self.rcvout = rcvout
167
170 self.name = "LDM"
171
172 self.rcv0 = rcv0
173 self.rcv1 = None
174 self.rcvout = rcvout
175
177 - def __init__(self, rcv0, rcv1, rcvout) :
178 self.name = "MOD"
179
180 self.rcv0 = rcv0
181 self.rcv1 = rcv1
182 self.rcvout = rcvout
183
185 - def __init__(self, rcv0, rcv1, rcvout) :
186 self.name = "MUL"
187
188 self.rcv0 = rcv0
189 self.rcv1 = rcv1
190 self.rcvout = rcvout
191
194 self.name = "NOP"
195
196 self.rcv0 = None
197 self.rcv1 = None
198 self.rcvout = None
199
201 - def __init__(self, rcv0, rcv1, rcvout) :
202 self.name = "OR"
203
204 self.rcv0 = rcv0
205 self.rcv1 = rcv1
206 self.rcvout = rcvout
207
210 self.name = "STM"
211
212 self.rcv0 = rcv0
213 self.rcv1 = None
214 self.rcvout = rcvout
215
218 self.name = "STR"
219
220 self.rcv0 = rcv0
221 self.rcv1 = None
222 self.rcvout = rcvout
223
225 - def __init__(self, rcv0, rcv1, rcvout) :
226 self.name = "SUB"
227
228 self.rcv0 = rcv0
229 self.rcv1 = rcv1
230 self.rcvout = rcvout
231
234 self.name = "UNDEF"
235
236 self.rcv0 = None
237 self.rcv1 = None
238 self.rcvout = None
239
242 self.name = "UNKN"
243
244 self.rcv0 = None
245 self.rcv1 = None
246 self.rcvout = None
247
249 - def __init__(self, rcv0, rcv1, rcvout) :
250 self.name = "XOR"
251
252 self.rcv0 = rcv0
253 self.rcv1 = rcv1
254 self.rcvout = rcvout
255
258
261 self.__RI = []
262
263 var_j = REIL_REGISTER( "j", 4, 0 )
264 var_germe = REIL_REGISTER( "GERME", 4, prng["GERME"] )
265 var_a = REIL_REGISTER( "A", 4, prng["A"] )
266 var_c = REIL_REGISTER( "C", 4, prng["C"] )
267 var_m = REIL_REGISTER( "M", 4, prng["M"] )
268 var_iter = REIL_REGISTER( "ITER", 4, prng["ITER"] )
269 var_tmp = REIL_REGISTER( "TMP", 4 )
270
271 for i in INIT_VAR( [ var_j, var_germe, var_a, var_c, var_m, var_iter ] ) :
272 self.__RI.append( i )
273
274
275 self.__RI.append( REIL_SUB(var_j, var_iter, var_tmp) )
276 self.__RI.append( REIL_BISZ(var_tmp, var_tmp) )
277 branch_1 = [ REIL_JCC(var_tmp, REIL_LITERAL(0)), len(self.__RI) - 2 ]
278
279 self.__RI.append( branch_1[0] )
280
281
282 self.__RI.append( REIL_MUL(var_a, var_germe, var_germe) )
283 self.__RI.append( REIL_ADD(var_germe, var_c, var_germe) )
284 self.__RI.append( REIL_MOD(var_germe, var_m, var_germe) )
285
286 self.__RI.append( REIL_ADD(var_j, REIL_LITERAL(1), var_j) )
287 branch_2 = [ REIL_JCC(REIL_LITERAL(1), REIL_OFFSET( branch_1[1] ) ) ]
288
289 self.__RI.append( branch_2[0] )
290
291 branch_1[0].rcvout = REIL_OFFSET( len(self.__RI) )
292
293 nb = 0
294 for i in self.__RI :
295 print "0x%x" % nb,
296 i.view()
297 nb += 1
298
299 self.__result = var_germe
300
302 return [ "int", "", self.__RI, self.__result ]
303
306 self.__math = math
307 self.__RI = []
308 self.__RR = {}
309 self.__result = ""
310
311 self.__b_op = { '+' : REIL_ADD,
312 '-' : REIL_SUB
313 }
314
315 self.run()
316
318 for i in self.__math :
319 if i[0] not in self.__RR :
320 self.__RR[ i[0] ] = REIL_REGISTER( i[0], 4 )
321
322 if len(i) == 3 :
323 r = REIL_STR( REIL_LITERAL( i[2], 4 ), self.__RR[ i[0] ] )
324 elif len(i) == 5 :
325 r = self.__b_op[i[3]]( self.__RR[ i[2] ], REIL_LITERAL( i[4], 4 ), self.__RR[ i[0] ] )
326 else :
327 raise('ooops')
328
329 self.__RI.append( r )
330
331 for i in self.__RI :
332 if i.rcvout.get_name() == self.__math[-1][0] :
333 self.__result = i.rcvout
334 break
335
337 return [ "int", "", self.__RI, self.__result ]
338
339
368
371 self.__buff = "int x = 0;\n"
372 self.__buff += "int value = 0;\n"
373
374 self.__buff += VM.get_pos_reg( 3, "x" )
375 self.__buff += VM.get_value( 1, "value" )
376 self.__buff += VM.set_reg( "x", "value" )
377
379 return self.__buff + "\n" + "System.out.println(\"---- STR\\n\");\n"
380
383 self.__buff = "int x = 0;\n"
384 self.__buff += "int value1 = 0, value2 = 0;\n"
385
386 self.__buff += VM.get_pos_reg( 3, "x" )
387
388 self.__buff += VM.get_value( 1, "value1")
389 self.__buff += VM.get_value( 2, "value2")
390
391 self.__buff += "value1 = value1 + value2;\n"
392 self.__buff += VM.set_reg( "x", "value1" )
393
395 return self.__buff + "\n" + "System.out.println(\"---- ADD\\n\");\n"
396
399 self.__buff = "int x = 0;\n"
400 self.__buff += "int value1 = 0, value2 = 0;\n"
401
402 self.__buff += VM.get_pos_reg( 3, "x" )
403
404 self.__buff += VM.get_value( 1, "value1")
405 self.__buff += VM.get_value( 2, "value2")
406
407 self.__buff += "value1 = value1 - value2;\n"
408 self.__buff += VM.set_reg( "x", "value1" )
409
411 return self.__buff + "\n" + "System.out.println(\"---- SUB\\n\");\n"
412
415 self.__buff = "int x = 0;\n"
416 self.__buff += "int value = 0;\n"
417
418 self.__buff += VM.get_pos_reg( 3, "x" )
419
420 self.__buff += VM.get_value( 1, "value")
421
422 self.__buff += "if (value != 0) { " + VM.set_reg( "x", "0" ) + "}"
423 self.__buff += "else {" + VM.set_reg( "x", "1" ) + "}"
424
426 return self.__buff + "\n" + "System.out.println(\"---- BISZ\\n\");\n"
427
430 self.__buff = "int x = 0;\n"
431 self.__buff += "int value = 0;\n"
432
433 self.__buff += VM.get_value( 1, "value")
434
435
436 self.__buff += "if (value != 0) {" + VM.set_idx( 3 ) + "}"
437
439 return self.__buff + "\n" + "System.out.println(\"---- JCC\\n\");\n"
440
443 self.__buff = "int x = 0;\n"
444 self.__buff += "int value1 = 0, value2 = 0;\n"
445
446 self.__buff += VM.get_pos_reg( 3, "x" )
447
448 self.__buff += VM.get_value( 1, "value1")
449 self.__buff += VM.get_value( 2, "value2")
450
451 self.__buff += "value1 = value1 * value2;\n"
452 self.__buff += VM.set_reg( "x", "value1" )
453
455 return self.__buff + "\n" + "System.out.println(\"---- MUL\\n\");\n"
456
459 self.__buff = "int x = 0;\n"
460 self.__buff += "int value1 = 0, value2 = 0;\n"
461
462 self.__buff += VM.get_pos_reg( 3, "x" )
463
464 self.__buff += VM.get_value( 1, "value1")
465 self.__buff += VM.get_value( 2, "value2")
466
467 self.__buff += "value1 = value1 % value2;\n"
468 self.__buff += VM.set_reg( "x", "value1" )
469
471 return self.__buff + "\n" + "System.out.println(\"---- MOD\\n\");\n"
472
489
491 return self.__buff + "\n"
492