def near_offset(self, offset):
'''Return the member near to the specified ``offset``.'''
min,max = map(lambda sz: sz + self.baseoffset, (idaapi.get_struc_first_offset(self.owner.ptr),idaapi.get_struc_last_offset(self.owner.ptr)))
if (offset < min) or (offset >= max):
logging.warn("{:s}.instance({:s}).members.near_offset : Requested offset {:+#x} not within bounds ({:#x},{:#x}). Trying anyways..".format(__name__, self.owner.name, offset, min, max))
res = offset - self.baseoffset
mem = idaapi.get_member(self.owner.ptr, res)
if mem is None:
logging.info("{:s}.instance({:s}).members.near_offset : Unable to locate member at offset {:+#x}. Trying get_best_fit_member instead.".format(__name__, self.owner.name, res))
mem = idaapi.get_best_fit_member(self.owner.ptr, res)
if mem is None:
raise LookupError("{:s}.instance({:s}).members.near_offset : Unable to find member near offset : {:+#x}".format(__name__, self.owner.name, offset))
index = self.index(mem)
return self[index]
评论列表
文章目录