Miasm2
 All Classes Namespaces Files Functions Variables Typedefs Properties Macros
Public Member Functions | Private Attributes | List of all members
miasm2.core.asmbloc.asm_symbol_pool Class Reference
+ Collaboration diagram for miasm2.core.asmbloc.asm_symbol_pool:

Public Member Functions

def __init__
 
def add_label
 
def remove_label
 
def del_label_offset
 
def getby_offset
 
def getby_name
 
def getby_name_create
 
def getby_offset_create
 
def rename_label
 
def set_offset
 
def items
 
def __str__
 
def __getitem__
 
def __contains__
 
def merge
 
def gen_label
 

Private Attributes

 _labels
 
 _name2label
 
 _offset2label
 
 _label_num
 

Detailed Description

Definition at line 222 of file asmbloc.py.

Constructor & Destructor Documentation

def miasm2.core.asmbloc.asm_symbol_pool.__init__ (   self)

Member Function Documentation

def miasm2.core.asmbloc.asm_symbol_pool.__contains__ (   self,
  item 
)

Definition at line 330 of file asmbloc.py.

331  def __contains__(self, item):
332  return item in self._name2label or item in self._offset2label
def miasm2.core.asmbloc.asm_symbol_pool.__getitem__ (   self,
  item 
)

Definition at line 323 of file asmbloc.py.

324  def __getitem__(self, item):
325  if item in self._name2label:
326  return self._name2label[item]
327  if item in self._offset2label:
328  return self._offset2label[item]
329  raise KeyError('unknown symbol %r' % item)
def miasm2.core.asmbloc.asm_symbol_pool.__str__ (   self)

Definition at line 320 of file asmbloc.py.

321  def __str__(self):
322  return reduce(lambda x, y: x + str(y) + '\n', self._labels, "")
def miasm2.core.asmbloc.asm_symbol_pool.add_label (   self,
  name,
  offset = None 
)
Create and add a label to the symbol_pool
@name: label's name
@offset: (optional) label's offset

Definition at line 230 of file asmbloc.py.

231  def add_label(self, name, offset=None):
232  """
233  Create and add a label to the symbol_pool
234  @name: label's name
235  @offset: (optional) label's offset
236  """
237  label = asm_label(name, offset)
238 
239  # Test for collisions
240  if (label.offset in self._offset2label and
241  label != self._offset2label[label.offset]):
242  raise ValueError('symbol %s has same offset as %s' %
243  (label, self._offset2label[label.offset]))
244  if (label.name in self._name2label and
245  label != self._name2label[label.name]):
246  raise ValueError('symbol %s has same name as %s' %
247  (label, self._name2label[label.name]))
248 
249  self._labels.append(label)
250  if label.offset is not None:
251  self._offset2label[label.offset] = label
252  if label.name != "":
253  self._name2label[label.name] = label
254  return label

+ Here is the caller graph for this function:

def miasm2.core.asmbloc.asm_symbol_pool.del_label_offset (   self,
  label 
)
Unpin the @label from its offset

Definition at line 264 of file asmbloc.py.

265  def del_label_offset(self, label):
266  """Unpin the @label from its offset"""
267  self._offset2label.pop(label.offset, None)
268  label.offset = None
def miasm2.core.asmbloc.asm_symbol_pool.gen_label (   self)
Generate a new unpinned label

Definition at line 339 of file asmbloc.py.

340  def gen_label(self):
341  """Generate a new unpinned label"""
342  label = self.add_label("lbl_gen_%.8X" % (self._label_num))
343  self._label_num += 1
344  return label
345 

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

def miasm2.core.asmbloc.asm_symbol_pool.getby_name (   self,
  name 
)
Retrieve label using its @name

Definition at line 273 of file asmbloc.py.

274  def getby_name(self, name):
275  """Retrieve label using its @name"""
276  return self._name2label.get(name, None)

+ Here is the caller graph for this function:

def miasm2.core.asmbloc.asm_symbol_pool.getby_name_create (   self,
  name 
)
Get a label from its @name, create it if it doesn't exist

Definition at line 277 of file asmbloc.py.

278  def getby_name_create(self, name):
279  """Get a label from its @name, create it if it doesn't exist"""
280  label = self.getby_name(name)
281  if label is None:
282  label = self.add_label(name)
283  return label

+ Here is the call graph for this function:

def miasm2.core.asmbloc.asm_symbol_pool.getby_offset (   self,
  offset 
)
Retrieve label using its @offset

Definition at line 269 of file asmbloc.py.

270  def getby_offset(self, offset):
271  """Retrieve label using its @offset"""
272  return self._offset2label.get(offset, None)

+ Here is the caller graph for this function:

def miasm2.core.asmbloc.asm_symbol_pool.getby_offset_create (   self,
  offset 
)
Get a label from its @offset, create it if it doesn't exist

Definition at line 284 of file asmbloc.py.

285  def getby_offset_create(self, offset):
286  """Get a label from its @offset, create it if it doesn't exist"""
287  label = self.getby_offset(offset)
288  if label is None:
289  label = self.add_label(offset, offset)
290  return label

+ Here is the call graph for this function:

def miasm2.core.asmbloc.asm_symbol_pool.items (   self)
Return all labels

Definition at line 316 of file asmbloc.py.

317  def items(self):
318  """Return all labels"""
319  return self._labels

+ Here is the caller graph for this function:

def miasm2.core.asmbloc.asm_symbol_pool.merge (   self,
  symbol_pool 
)
Merge with another @symbol_pool

Definition at line 333 of file asmbloc.py.

334  def merge(self, symbol_pool):
335  """Merge with another @symbol_pool"""
336  self._labels += symbol_pool._labels
337  self._name2label.update(symbol_pool._name2label)
338  self._offset2label.update(symbol_pool._offset2label)
def miasm2.core.asmbloc.asm_symbol_pool.remove_label (   self,
  label 
)
Delete a @label

Definition at line 255 of file asmbloc.py.

256  def remove_label(self, label):
257  """
258  Delete a @label
259  """
260  self._name2label.pop(label.name, None)
261  self._offset2label.pop(label.offset, None)
262  if label in self._labels:
263  self._labels.remove(label)
def miasm2.core.asmbloc.asm_symbol_pool.rename_label (   self,
  label,
  newname 
)
Rename the @label name to @newname

Definition at line 291 of file asmbloc.py.

292  def rename_label(self, label, newname):
293  """Rename the @label name to @newname"""
294  if newname in self._name2label:
295  raise ValueError('Symbol already known')
296  self._name2label.pop(label.name, None)
297  label.name = newname
298  self._name2label[label.name] = label
def miasm2.core.asmbloc.asm_symbol_pool.set_offset (   self,
  label,
  offset 
)
Pin the @label from at @offset
Note that there is a special case when the offset is a list
it happens when offsets are recomputed in resolve_symbol*

Definition at line 299 of file asmbloc.py.

300  def set_offset(self, label, offset):
301  """Pin the @label from at @offset
302  Note that there is a special case when the offset is a list
303  it happens when offsets are recomputed in resolve_symbol*
304  """
305  if label is None:
306  raise ValueError('label should not be None')
307  if not label.name in self._name2label:
308  raise ValueError('label %s not in symbol pool' % label)
309  if offset is not None and offset in self._offset2label:
310  raise ValueError('Conflict in label %s' % label)
311  self._offset2label.pop(label.offset, None)
312  label.offset = offset
313  if is_int(label.offset):
314  self._offset2label[label.offset] = label

+ Here is the call graph for this function:

Member Data Documentation

miasm2.core.asmbloc.asm_symbol_pool._label_num
private

Definition at line 228 of file asmbloc.py.

miasm2.core.asmbloc.asm_symbol_pool._labels
private

Definition at line 225 of file asmbloc.py.

miasm2.core.asmbloc.asm_symbol_pool._name2label
private

Definition at line 226 of file asmbloc.py.

miasm2.core.asmbloc.asm_symbol_pool._offset2label
private

Definition at line 227 of file asmbloc.py.


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