def iterate(): """Iterate through all structures defined in the database""" idx = idaapi.get_first_struc_idx() while idx != idaapi.get_last_struc_idx(): identifier = idaapi.get_struc_by_idx(idx) yield instance(identifier) idx = idaapi.get_next_struc_idx(idx) idx = idaapi.get_last_struc_idx() yield instance(idaapi.get_struc_by_idx(idx))
def by_index(index, **options): '''Return a structure by it's index.''' id = idaapi.get_struc_by_idx(index) if id == idaapi.BADADDR: raise IndexError( "{:s}.by_index({:d}) : Unable to locate structure at given index.". format(__name__, index)) return instance(id, **options)
def loadStructs(): idx = idaapi.get_first_struc_idx() existingStructs = [] while idx != idc.BADADDR: tid = idaapi.get_struc_by_idx(idx) existingStructs.append(idaapi.get_struc_name(tid)) idx = idaapi.get_next_struc_idx(idx) existingStructs.sort() return existingStructs
def foreachStructureNameAndSize(struct_iterator, *additionalArgs): assertFunction(struct_iterator) first = int(getFirstStructIdx()) last = int(getLastStructIdx()) for i in range(first, last): sid = idaapi.get_struc_by_idx(i) if not struct_iterator(idaapi.get_struc_name(sid), idaapi.get_struc_size(sid), *additionalArgs): break
def handle_structs(delta, segs): for idx in range(idaapi.get_struc_qty()): tid = idaapi.get_struc_by_idx(idx) for cmt_type in (True, False): cmt = idaapi.get_struc_cmt(tid, cmt_type) if cmt: new_cmt = rebase_comment(segs, delta, cmt) if new_cmt: idaapi.set_struc_cmt(tid, new_cmt, cmt_type) s = idaapi.get_struc(tid) for midx in range(s.memqty): m = s.get_member(midx) for cmt_type in (True, False): cmt = idaapi.get_member_cmt(m.id, cmt_type) if cmt: new_cmt = rebase_comment(segs, delta, cmt) if new_cmt: idaapi.set_member_cmt(m, new_cmt, cmt_type)
def byIndex(index, **options): """Return a structure by it's index""" id = idaapi.get_struc_by_idx(index) if id == idaapi.BADADDR: raise IndexError, 'Unable to locate structure #{:d}'.format(index) return instance(id, **options)
def __getitem__(self, idx): s = idaapi.get_struc_by_idx(idx) return idastruct(s) if s != idc.BADADDR else None
def getStructIdFromIdx(idx): return idaapi.get_struc_by_idx(idx)
def __init__(self): self.elts = [] for i in range(idaapi.get_struc_qty()): self.elts.append( struct_node(idaapi.get_struc(idaapi.get_struc_by_idx(i))))
def __init__(self): self.elts = [] for i in range(idaapi.get_struc_qty()): self.elts.append(struct_node(idaapi.get_struc(idaapi.get_struc_by_idx(i))))