92 lines
2.9 KiB
Python
92 lines
2.9 KiB
Python
import os, sys
|
|
from core.project import Project
|
|
from optparse import OptionParser, OptionGroup
|
|
|
|
|
|
def project_main(options, args):
|
|
p = Project(options.projectName, allow_create=options.projectCreate)
|
|
|
|
if options.deleteGroup:
|
|
p.group_delete(options.deleteGroup)
|
|
|
|
if options.loadELF:
|
|
p.load_elf(options.loadELF, load_segments=options.loadSegments, load_symbols=options.loadSymbols)
|
|
|
|
if options.symbolize:
|
|
for addr in args[1:]:
|
|
addr = int(addr, 0)
|
|
name = p.symbolize(addr)
|
|
print("0x%x = %s" % (addr, name))
|
|
|
|
if options.show:
|
|
p.show()
|
|
|
|
def project_optparse(argv):
|
|
parser = OptionParser()
|
|
parser.add_option("-p", "--project", dest="projectName",
|
|
help="Path to project", metavar="DIR", default=".")
|
|
|
|
parser.add_option("-c", "--create", dest="projectCreate", action="store_true",
|
|
help="Create new project", default=False)
|
|
|
|
parser.add_option("-s", "--show", dest="show", action="store_true",
|
|
help="Show project details", default=False)
|
|
|
|
parser.add_option("-S", "--symbolize", dest="symbolize", action="store_true",
|
|
help="Lookup symbol by address", default=False)
|
|
|
|
# Load
|
|
group = OptionGroup(parser, "Loading files")
|
|
group.add_option("-e", "--load-elf", dest="loadELF",
|
|
help="Path to project", metavar="FILE")
|
|
|
|
group.add_option("", "--no-symbols", dest="loadSymbols", action="store_false",
|
|
help="Create new project", default=True)
|
|
group.add_option("", "--no-segments", dest="loadSegments", action="store_false",
|
|
help="Create new project", default=True)
|
|
parser.add_option_group(group)
|
|
|
|
# Segment group management
|
|
group = OptionGroup(parser, "Group management")
|
|
group.add_option("", "--group-delete", dest="deleteGroup",
|
|
help="Delete group", default=False)
|
|
parser.add_option_group(group)
|
|
|
|
(options, args) = parser.parse_args(argv)
|
|
|
|
if len(argv) == 1:
|
|
parser.print_help()
|
|
parser.error('No action taken')
|
|
|
|
cfg = os.path.join(options.projectName, "project.json")
|
|
if not os.path.isfile(cfg) and not options.projectCreate:
|
|
parser.print_help()
|
|
parser.error('projectName not given')
|
|
|
|
project_main(options, args)
|
|
|
|
def usage():
|
|
print("usage %s [module]" % sys.argv[0])
|
|
print("Modules:")
|
|
print("\tproject Manage projects")
|
|
print("\tdjago Django console")
|
|
sys.exit(-1)
|
|
|
|
|
|
|
|
if len(sys.argv) == 1:
|
|
usage()
|
|
|
|
module = sys.argv[1]
|
|
if module == "project":
|
|
project_optparse(sys.argv[1:])
|
|
|
|
elif module == "django":
|
|
from django.core.management import execute_from_command_line
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "frankensteinWebUI.settings")
|
|
execute_from_command_line(sys.argv[1:])
|
|
|
|
else:
|
|
usage()
|
|
|