def load(self, filename): gc.disable() dirname = os.path.dirname(filename) self.path = dirname + "/" if dirname != "" else "" self.path += "." + os.path.basename(filename) + ".db" if os.path.exists(self.path): info("open database %s" % self.path) fd = open(self.path, "rb") data = fd.read() if data.startswith(b"ZLIB"): data = zlib.decompress(data[4:]) data = msgpack.unpackb(data, encoding="utf-8") fd.close() self.__load_meta(data) self.__load_memory(data) self.__load_symbols(data) self.__load_jmptables(data) self.__load_comments(data) self.__load_functions(data) self.__load_history(data) self.__load_xrefs(data) self.__load_imports(data) self.__load_immediates(data) if self.version <= 1.5: self.__load_labels(data) if self.version < VERSION: die("your version of plasma is too old") elif self.version != VERSION: warning( "the database version is old, some information may be missing" ) self.loaded = True gc.enable()
def console_entry(): gctx = GlobalContext() gctx.parse_args() if gctx.color and plasma.lib.colors.VERSION < plasma.lib.colors.CURR_VERSION: info("There is a new version of custom_colors.py. If you did any") info("modifications you can delete it. Otherwise you can copy it") info("somewhere, run again your command then merge the file at hand.") die() if gctx.filename is None: die() if not gctx.load_file(): die() if gctx.interactive_mode: from plasma.lib.ui.console import Console gctx.is_interactive = True Console(gctx) else: gctx.api = Api(gctx, None) if gctx.list_sections: for s in gctx.dis.binary.iter_sections(): s.print_header() sys.exit(0) if gctx.syms: gctx.dis.print_symbols(gctx.sectionsname) sys.exit(0) ctx = gctx.get_addr_context(gctx.entry) if ctx is None: sys.exit(0) if gctx.do_dump: ctx.dump_asm(gctx.nb_lines).print() sys.exit(0) o = ctx.decompile() if gctx.graph: ctx.gph.dot_graph(gctx.dis.jmptables) if o is not None: if gctx.vim: base = os.path.basename(gctx.filename) + "_" + gctx.entry # re-assign if no colors gctx.libarch.process_ast.assign_colors(ctx, ctx.ast) gctx.color = False generate_vim_syntax(ctx, base + ".vim") sys.stdout = open(base + ".rev", "w+") o.print() if gctx.vim: print("run : vim {0}.rev -S {0}.vim".format(base), file=sys.stderr)
def load(self, filename): gc.disable() dirname = os.path.dirname(filename) self.path = dirname + "/" if dirname != "" else "" self.path += "." + os.path.basename(filename) + ".db" if os.path.exists(self.path): info("open database %s" % self.path) fd = open(self.path, "rb") data = fd.read() if data.startswith(b"ZLIB"): data = zlib.decompress(data[4:]) data = msgpack.unpackb(data, encoding="utf-8") fd.close() self.__load_meta(data) self.__load_memory(data) self.__load_symbols(data) self.__load_jmptables(data) self.__load_comments(data) self.__load_functions(data) self.__load_history(data) self.__load_xrefs(data) self.__load_imports(data) self.__load_immediates(data) if self.version <= 1.5: self.__load_labels(data) if self.version < VERSION: die("your version of plasma is too old") elif self.version != VERSION: warning("the database version is old, some information may be missing") self.loaded = True gc.enable()
def load(self, filename): gc.disable() self.path = filename if os.path.exists(self.path): info("open database %s" % self.path) fd = open(self.path, "rb") data = fd.read() if data.startswith(b"ZLIB"): data = zlib.decompress(data[4:]) data = msgpack.unpackb(data, encoding="utf-8") fd.close() self.__load_meta(data) if self.version == LAST_COMPATIBLE: warning("the database version is old, some information may be missing") elif self.version < LAST_COMPATIBLE: die("the database is too old") self.__load_memory(data) self.__load_symbols(data) self.__load_jmptables(data) self.__load_comments(data) self.__load_functions(data) self.__load_history(data) self.__load_xrefs(data) self.__load_imports(data) self.__load_immediates(data) self.__load_inverted_cond(data) self.loaded = True gc.enable()
def console_entry(): gctx = GlobalContext() gctx.parse_args() if gctx.color and plasma.lib.colors.VERSION < plasma.lib.colors.CURR_VERSION: info("There is a new version of custom_colors.py. If you did any") info("modifications you can delete it. Otherwise you can copy it") info("somewhere, run again your command then merge the file at hand.") die() if gctx.filename is None: die() if not gctx.load_file(): die() if gctx.interactive_mode: from plasma.lib.ui.console import Console gctx.is_interactive = True Console(gctx) else: gctx.api = Api(gctx, None) if gctx.list_sections: for s in gctx.dis.binary.iter_sections(): s.print_header() sys.exit(0) if gctx.syms: gctx.dis.print_symbols() sys.exit(0) ctx = gctx.get_addr_context(gctx.entry) if ctx is None: sys.exit(0) if gctx.do_dump: ctx.dump_asm(gctx.nb_lines).print() sys.exit(0) o = ctx.decompile() if gctx.graph: ctx.gph.dot_graph(gctx.dis.jmptables) if o is not None: if gctx.vim: base = os.path.basename(gctx.filename) + "_" + gctx.entry # re-assign if no colors gctx.libarch.process_ast.assign_colors(ctx, ctx.ast) gctx.color = False generate_vim_syntax(ctx, base + ".vim") sys.stdout = open(base + ".rev", "w+") o.print() if gctx.vim: print("run : vim {0}.rev -S {0}.vim".format(base), file=sys.stderr)