Miasm2
 All Classes Namespaces Files Functions Variables Typedefs Properties Macros
Public Member Functions | Public Attributes | List of all members
miasm2.analysis.debugging.Debugguer Class Reference
+ Inheritance diagram for miasm2.analysis.debugging.Debugguer:
+ Collaboration diagram for miasm2.analysis.debugging.Debugguer:

Public Member Functions

def __init__
 
def init_run
 
def add_breakpoint
 
def init_memory_breakpoint
 
def add_memory_breakpoint
 
def remove_breakpoint
 
def remove_breakpoint_by_addr
 
def remove_memory_breakpoint
 
def remove_memory_breakpoint_by_addr_access
 
def get_breakpoint_by_addr
 
def get_breakpoints
 
def active_trace
 
def handle_exception
 
def step
 
def run
 
def get_mem
 
def get_mem_raw
 
def watch_mem
 
def on_step
 
def get_reg_value
 
def set_reg_value
 
def get_gpreg_all
 

Public Attributes

 myjit
 
 bp_list
 
 hw_bp_list
 
 mem_watched
 

Detailed Description

Definition at line 67 of file debugging.py.

Constructor & Destructor Documentation

def miasm2.analysis.debugging.Debugguer.__init__ (   self,
  myjit 
)

Definition at line 71 of file debugging.py.

71 
72  def __init__(self, myjit):
73  "myjit : jitter instance"
74  self.myjit = myjit
75  self.bp_list = [] # DebugBreakpointSoft list
76  self.hw_bp_list = [] # DebugBreakpointHard list
77  self.mem_watched = [] # Memory areas watched

Member Function Documentation

def miasm2.analysis.debugging.Debugguer.active_trace (   self,
  mn = None,
  regs = None,
  newbloc = None 
)

Definition at line 135 of file debugging.py.

136  def active_trace(self, mn=None, regs=None, newbloc=None):
137  if mn is not None:
138  self.myjit.jit.log_mn = mn
139  if regs is not None:
140  self.myjit.jit.log_regs = regs
141  if newbloc is not None:
142  self.myjit.jit.log_newbloc = newbloc
def miasm2.analysis.debugging.Debugguer.add_breakpoint (   self,
  addr 
)

Definition at line 81 of file debugging.py.

81 
82  def add_breakpoint(self, addr):
83  "Add bp @addr"
84  bp = DebugBreakpointSoft(addr)
85  func = lambda x: bp
86  bp.func = func
87  self.bp_list.append(bp)
88  self.myjit.add_breakpoint(addr, func)

+ Here is the caller graph for this function:

def miasm2.analysis.debugging.Debugguer.add_memory_breakpoint (   self,
  addr,
  size,
  read = False,
  write = False 
)

Definition at line 93 of file debugging.py.

93 
94  def add_memory_breakpoint(self, addr, size, read=False, write=False):
95  "add mem bp @[addr, addr + size], on read/write/both"
96  access_type = DebugBreakpointMemory.get_access_type(read=read,
97  write=write)
98  dbm = DebugBreakpointMemory(addr, size, access_type)
99  self.hw_bp_list.append(dbm)
100  self.myjit.vm.add_memory_breakpoint(addr, size, access_type)
def miasm2.analysis.debugging.Debugguer.get_breakpoint_by_addr (   self,
  addr 
)

Definition at line 125 of file debugging.py.

126  def get_breakpoint_by_addr(self, addr):
127  ret = []
128  for dbgsoft in self.bp_list:
129  if dbgsoft.addr == addr:
130  ret.append(dbgsoft)
131  return ret

+ Here is the caller graph for this function:

def miasm2.analysis.debugging.Debugguer.get_breakpoints (   self)

Definition at line 132 of file debugging.py.

133  def get_breakpoints(self):
134  return self.bp_list
def miasm2.analysis.debugging.Debugguer.get_gpreg_all (   self)

Definition at line 213 of file debugging.py.

214  def get_gpreg_all(self):
215  "Return general purposes registers"
216  return self.myjit.cpu.get_gpreg()
217 
def miasm2.analysis.debugging.Debugguer.get_mem (   self,
  addr,
  size = 0xF 
)

Definition at line 185 of file debugging.py.

186  def get_mem(self, addr, size=0xF):
187  "hexdump @addr, size"
188 
189  hexdump(self.myjit.vm.get_mem(addr, size))

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

def miasm2.analysis.debugging.Debugguer.get_mem_raw (   self,
  addr,
  size = 0xF 
)

Definition at line 190 of file debugging.py.

191  def get_mem_raw(self, addr, size=0xF):
192  "hexdump @addr, size"
193  return self.myjit.vm.get_mem(addr, size)
def miasm2.analysis.debugging.Debugguer.get_reg_value (   self,
  reg_name 
)

Definition at line 202 of file debugging.py.

203  def get_reg_value(self, reg_name):
204  return getattr(self.myjit.cpu, reg_name)
def miasm2.analysis.debugging.Debugguer.handle_exception (   self,
  res 
)

Definition at line 143 of file debugging.py.

144  def handle_exception(self, res):
145  if not res:
146  # A breakpoint has stopped the execution
147  return DebugBreakpointTerminate(res)
148 
149  if isinstance(res, DebugBreakpointSoft):
150  print "Breakpoint reached @0x%08x" % res.addr
151  elif isinstance(res, ExceptionHandle):
152  if res == ExceptionHandle.memoryBreakpoint():
153  print "Memory breakpoint reached!"
154 
155  # Remove flag
156  except_flag = self.myjit.vm.get_exception()
157  self.myjit.vm.set_exception(except_flag ^ res.except_flag)
158 
159  else:
160  raise NotImplementedError("Unknown Except")
161  else:
162  raise NotImplementedError("type res")
163 
164  # Repropagate res
165  return res

+ Here is the caller graph for this function:

def miasm2.analysis.debugging.Debugguer.init_memory_breakpoint (   self)

Definition at line 89 of file debugging.py.

89 
90  def init_memory_breakpoint(self):
91  "Set exception handler on EXCEPT_BREAKPOINT_INTERN"
92  raise NotImplementedError("Not implemented")
def miasm2.analysis.debugging.Debugguer.init_run (   self,
  addr 
)

Definition at line 78 of file debugging.py.

78 
79  def init_run(self, addr):
80  self.myjit.init_run(addr)

+ Here is the caller graph for this function:

def miasm2.analysis.debugging.Debugguer.on_step (   self)

Definition at line 197 of file debugging.py.

198  def on_step(self):
199  for addr, size in self.mem_watched:
200  print "@0x%08x:" % addr
201  self.get_mem(addr, size)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

def miasm2.analysis.debugging.Debugguer.remove_breakpoint (   self,
  dbs 
)

Definition at line 101 of file debugging.py.

102  def remove_breakpoint(self, dbs):
103  "remove the DebugBreakpointSoft instance"
104  self.bp_list.remove(dbs)
105  self.myjit.remove_breakpoints_by_callback(dbs.func)

+ Here is the caller graph for this function:

def miasm2.analysis.debugging.Debugguer.remove_breakpoint_by_addr (   self,
  addr 
)

Definition at line 106 of file debugging.py.

107  def remove_breakpoint_by_addr(self, addr):
108  "remove breakpoints @ addr"
109  for bp in self.get_breakpoint_by_addr(addr):
110  self.remove_breakpoint(bp)

+ Here is the call graph for this function:

def miasm2.analysis.debugging.Debugguer.remove_memory_breakpoint (   self,
  dbm 
)

Definition at line 111 of file debugging.py.

112  def remove_memory_breakpoint(self, dbm):
113  "remove the DebugBreakpointMemory instance"
114  self.hw_bp_list.remove(dbm)
115  self.myjit.vm.remove_memory_breakpoint(dbm.addr, dbm.access_type)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

def miasm2.analysis.debugging.Debugguer.remove_memory_breakpoint_by_addr_access (   self,
  addr,
  read = False,
  write = False 
)

Definition at line 117 of file debugging.py.

118  write=False):
119  "remove breakpoints @ addr"
120  access_type = DebugBreakpointMemory.get_access_type(read=read,
121  write=write)
122  for bp in self.hw_bp_list:
123  if bp.addr == addr and bp.access_type == access_type:
124  self.remove_memory_breakpoint(bp)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

def miasm2.analysis.debugging.Debugguer.run (   self)

Definition at line 181 of file debugging.py.

182  def run(self):
183  status = self.myjit.continue_run()
184  return self.handle_exception(status)

+ Here is the call graph for this function:

def miasm2.analysis.debugging.Debugguer.set_reg_value (   self,
  reg_name,
  value 
)

Definition at line 205 of file debugging.py.

206  def set_reg_value(self, reg_name, value):
207 
208  # Handle PC case
209  if reg_name == self.myjit.ir_arch.pc.name:
210  self.init_run(value)
211 
212  setattr(self.myjit.cpu, reg_name, value)

+ Here is the call graph for this function:

def miasm2.analysis.debugging.Debugguer.step (   self)

Definition at line 166 of file debugging.py.

167  def step(self):
168  "Step in jit"
169 
170  self.myjit.jit.set_options(jit_maxline=1)
171  self.myjit.jit.addr_mod = interval([(self.myjit.pc, self.myjit.pc)])
172  self.myjit.jit.updt_automod_code(self.myjit.vm)
173 
174  res = self.myjit.continue_run(step=True)
175  self.handle_exception(res)
176 
177  self.myjit.jit.set_options(jit_maxline=50)
178  self.on_step()
179 
180  return res

+ Here is the call graph for this function:

def miasm2.analysis.debugging.Debugguer.watch_mem (   self,
  addr,
  size = 0xF 
)

Definition at line 194 of file debugging.py.

195  def watch_mem(self, addr, size=0xF):
196  self.mem_watched.append((addr, size))

Member Data Documentation

miasm2.analysis.debugging.Debugguer.bp_list

Definition at line 74 of file debugging.py.

miasm2.analysis.debugging.Debugguer.hw_bp_list

Definition at line 75 of file debugging.py.

miasm2.analysis.debugging.Debugguer.mem_watched

Definition at line 76 of file debugging.py.

miasm2.analysis.debugging.Debugguer.myjit

Definition at line 73 of file debugging.py.


The documentation for this class was generated from the following file: