diff --git a/plasma/lib/__init__.py b/plasma/lib/__init__.py index d7f2eeb..b1b5e1b 100644 --- a/plasma/lib/__init__.py +++ b/plasma/lib/__init__.py @@ -119,6 +119,7 @@ def parse_args(self): help='Disable analysis on the entry point / symbols and don\'t scan memmory. You can force it with the command push_analyze_symbols.') parser.add_argument('--debugsp', action='store_true', help="Print the stack offset on each instructions. Warning: these values will not be saved in the database.") + parser.add_argument('--db_path', default=None, help="Database path ('..db' by default).") args = parser.parse_args() @@ -140,6 +141,7 @@ def parse_args(self): self.list_sections = args.sections self.autoanalyzer = not args.noautoanalyzer self.debugsp = args.debugsp + self.db_path = args.db_path if args.nbytes == 0: self.nbytes = 4 @@ -157,6 +159,13 @@ def parse_args(self): else: self.raw_base = 0 + def _get_database_path(self, executable_filename): + if self.db_path is not None: + return self.db_path + dirname = os.path.dirname(executable_filename) + path = dirname + "/" if dirname != "" else "" + path += "." + os.path.basename(executable_filename) + ".db" + return path def load_file(self, filename=None): if filename is None: @@ -175,7 +184,7 @@ def load_file(self, filename=None): die() self.db = Database() - self.db.load(filename) + self.db.load(self._get_database_path(filename)) if self.raw_base != 0: self.db.raw_base = self.raw_base diff --git a/plasma/lib/database.py b/plasma/lib/database.py index bdd3f0b..80a12a7 100644 --- a/plasma/lib/database.py +++ b/plasma/lib/database.py @@ -92,9 +92,7 @@ def __init_vars(self): def load(self, filename): gc.disable() - dirname = os.path.dirname(filename) - self.path = dirname + "/" if dirname != "" else "" - self.path += "." + os.path.basename(filename) + ".db" + self.path = filename if os.path.exists(self.path): info("open database %s" % self.path)