def __process_names(self): names = list() for i in range(0, ida_name.get_nlist_size()): ea = ida_name.get_nlist_ea(i) if ida_funcs.get_func(ea) is not None: continue name = { 'rva': ea - self._base, 'name': ida_name.get_nlist_name(i), 'name_demangled': ida_name.get_demangled_name(ea, 0xFFFF, 0, 0), 'is_public': ida_name.is_public_name(ea), 'is_func': ida_funcs.get_func(ea) is not None } # PE32/PE32+ only support binaries up to 2GB if name['rva'] >= 2**32: print('RVA out of range for name: ' + name['name'], file=sys.stderr) names.append(name) return names
def __process_functions(self): functions = list() start = ida_ida.cvar.inf.min_ea end = ida_ida.cvar.inf.max_ea # find first function head chunk in the range chunk = ida_funcs.get_fchunk(start) if not chunk: chunk = ida_funcs.get_next_fchunk(start) while chunk and chunk.start_ea < end and (chunk.flags & ida_funcs.FUNC_TAIL) != 0: chunk = ida_funcs.get_next_fchunk(chunk.start_ea) func = chunk while func and func.start_ea < end: start_ea = func.start_ea func_flags = ida_bytes.get_full_flags(start_ea) func_name = ida_funcs.get_func_name(start_ea) func_name_demangled = ida_name.get_demangled_name( start_ea, 0xFFFF, 0, 0) func_autonamed = func_flags & ida_bytes.FF_LABL != 0 func_public = ida_name.is_public_name(start_ea) function = { 'start_rva': start_ea - self._base, 'name': func_name, 'name_demangled': func_name_demangled, 'is_public': func_public, 'is_autonamed': func_autonamed } # PE32/PE32+ only support binaries up to 2GB if function['start_rva'] >= 2**32: print('RVA out of range for function: ' + function['name'], file=sys.stderr) self.__process_function_typeinfo(function, func) function['labels'] = self.__process_function_labels(func) functions.append(function) func = ida_funcs.get_next_func(start_ea) return functions