self.ARM_nop( 0) # push nop into pipeline - execute
self.ARMset_register(0, r0)
return(val)
-
+
+ '''
def ARMreadMem(self, adr, wrdcount=1):
retval = []
r0 = self.ARMget_register(0); # store R0 and R1
self.ARMset_register(1, r1); # restore R0 and R1
self.ARMset_register(0, r0);
return retval
+ '''
def ARMreadStream(self, addr, bytecount):
baseaddr = addr & 0xfffffffc
out = []
- data = self.ARMreadChunk( baseaddr, ((endaddr-baseaddr) / 4) )
+ data = [ x for x in self.ARMreadChunk( baseaddr, ((endaddr-baseaddr) / 4) ) ]
#print data, hex(baseaddr), hex(diffstart), hex(endaddr), hex(diffend)
if len(data) == 1:
#print "single dword"
out.append( struct.pack("<I", data.pop(0)) [:diffend] )
#print out
return ''.join(out)
- peek = ARMreadMem
def ARMreadChunk(self, adr, wordcount, verbose=True):
""" Only works in ARM mode currently
"""
regs = self.ARMget_registers()
self.ARMset_registers([0xdeadbeef for x in xrange(14)], 0xe)
- output = []
+ #output = []
count = wordcount
while (wordcount > 0):
if (verbose and wordcount%64 == 0): sys.stderr.write(".")
#FIXME: do we need the extra nop here?
self.ARMrestart()
self.ARMwaitDBG()
- output.extend([self.ARMget_register(x) for x in xrange(count)])
+ for x in range(count):
+ yield self.ARMget_register(x)
wordcount -= count
adr += count*4
#print hex(adr)
# FIXME: handle the rest of the wordcount here.
self.ARMset_registers(regs,0xe)
- return output
+ #return output
+ ARMreadMem = ARMreadChunk
+ peek = ARMreadMem
'''def ARMreadStream(self, adr, bytecount):
data = [struct.unpack("<L", x) for x in self.ARMreadChunk(adr, (bytecount-1/4)+1)]
return "".join(data)[:bytecount]
adr += count*4
#print hex(adr)
# FIXME: handle the rest of the wordcount here.
-
+ '''
def ARMwriteMem(self, adr, wordarray, instr=ARM_WRITE_MEM):
r0 = self.ARMget_register(0); # store R0 and R1
r1 = self.ARMget_register(1);
#print >>sys.stderr,hex(self.ARMget_register(1))
self.ARMset_register(1, r1); # restore R0 and R1
self.ARMset_register(0, r0);
+ '''
+ ARMwriteMem = ARMwriteChunk
def ARMwriteStream(self, addr, datastr):
#bytecount = len(datastr)