69 lines
2.0 KiB
Python
69 lines
2.0 KiB
Python
from manticore.core.smtlib import Operators
|
|
|
|
class Memory: #todo Mock
|
|
def getchar(self, addr):
|
|
raise NotImplementedError("getchar")
|
|
def putchar(self, addr, value):
|
|
raise NotImplementedError("putchar")
|
|
|
|
class Mem(object):
|
|
''' Mocking class for memory '''
|
|
def __init__(self, mem):
|
|
self.mem = dict(mem)
|
|
def getchar(self, addr):
|
|
#print "getchar",hex(addr), "%02x"%ord(self.mem[addr])
|
|
return self.mem[addr]
|
|
def putchar(self, addr, char):
|
|
#print "putchar",hex(addr), "%02x"%ord(char)
|
|
self.mem[addr]=char
|
|
def read(self, addr, size):
|
|
#print "read", hex(addr), size
|
|
result = ''
|
|
for i in xrange(size):
|
|
result+=self.mem[addr+i]
|
|
return result
|
|
def write(self, addr, data):
|
|
for i in xrange(len(data)):
|
|
self.mem[addr+i]=data[i]
|
|
def isExecutable(self, addr):
|
|
return True
|
|
def isWritable(self, addr):
|
|
return True
|
|
def isReadable(self, addr):
|
|
return True
|
|
|
|
class SMem(object):
|
|
''' Mocking class for memory '''
|
|
def __init__(self, array, init):
|
|
self.code = {}
|
|
self.mem = array
|
|
for addr, val in init.items():
|
|
self.mem[addr] = val
|
|
|
|
def getchar(self, addr):
|
|
if isinstance(addr, (int,long)) and addr in self.code.keys():
|
|
return self.code[addr]
|
|
return self.mem[addr]
|
|
|
|
def putchar(self, addr, char):
|
|
assert isinstance(addr,(int,long))
|
|
assert isinstance(char,str) and len(char) == 1
|
|
self.mem[addr]=char
|
|
|
|
def read(self, addr, size):
|
|
result = []
|
|
for i in xrange(size):
|
|
result.append(Operators.CHR(self.mem[addr+i]))
|
|
return result
|
|
|
|
def write(self, addr, data):
|
|
for i in xrange(len(data)):
|
|
self.mem[addr+i]=data[i]
|
|
|
|
def isExecutable(self, addr):
|
|
return True
|
|
def isReadable(self, addr):
|
|
return True
|
|
def isWritable(self, addr):
|
|
return True
|