@@ -211,34 +211,32 @@ def align(self, addr: int, alignment: int = 0x1000) -> int:
211211
212212 return (addr + (alignment - 1 )) & mask
213213
214- # save all mapped mem
215- def save (self ):
214+ def save (self ) -> Mapping [int , Tuple [int , int , int , str , bytes ]]:
215+ """Save entire memory content.
216+ """
217+
216218 mem_dict = {}
217- seq = 1
218219
219- for start , end , perm , info in self .map_info :
220- mem_read = self .read (start , end - start )
221- mem_dict [seq ] = start , end , perm , info , mem_read
222- seq += 1
220+ for i , (lbound , ubound , perm , label ) in enumerate (self .map_info , 1 ):
221+ data = self .read (lbound , ubound - lbound )
222+ mem_dict [i ] = (lbound , ubound , perm , label , bytes (data ))
223223
224224 return mem_dict
225225
226- # restore all dumped memory
227- def restore (self , mem_dict ):
228- for key , value in mem_dict .items ():
229- start = value [0 ]
230- end = value [1 ]
231- perm = value [2 ]
232- info = value [3 ]
233- mem_read = bytes (value [4 ])
234-
235- self .ql .log .debug ("restore key: %i 0x%x 0x%x %s" % (key , start , end , info ))
236- if self .is_mapped (start , end - start ) == False :
237- self .ql .log .debug ("mapping 0x%x 0x%x mapsize 0x%x" % (start , end , end - start ))
238- self .map (start , end - start , perms = perm , info = info )
239-
240- self .ql .log .debug ("writing 0x%x size 0x%x write_size 0x%x " % (start , end - start , len (mem_read )))
241- self .write (start , mem_read )
226+ def restore (self , mem_dict : Mapping [int , Tuple [int , int , int , str , bytes ]]):
227+ """Restore saved memory content.
228+ """
229+
230+ for key , (lbound , ubound , perms , label , data ) in mem_dict .items ():
231+ self .ql .log .debug (f'restore key: { key } { lbound :#08x} { ubound :#08x} { label } ' )
232+
233+ size = ubound - lbound
234+ if not self .is_mapped (lbound , size ):
235+ self .ql .log .debug (f'mapping { lbound :#08x} { ubound :#08x} , mapsize = { size :#x} ' )
236+ self .map (lbound , size , perms , label )
237+
238+ self .ql .log .debug (f'writing { lbound :#08x} , size = { size :#x} , write_size = { len (data ):#x} ' )
239+ self .write (lbound , data )
242240
243241 def read (self , addr : int , size : int ) -> bytearray :
244242 """Read bytes from memory.
0 commit comments