diff options
Diffstat (limited to '')
| -rwxr-xr-x | bfd/load.py | 26 | 
1 files changed, 26 insertions, 0 deletions
diff --git a/bfd/load.py b/bfd/load.py index 9178db6..d3480a7 100755 --- a/bfd/load.py +++ b/bfd/load.py @@ -4,6 +4,9 @@ import sys  import readline  import code  import signal +import os +import sys +import shutil  from capstone import *  from capstone.x86 import * @@ -48,6 +51,7 @@ class CLIArgParser(object):          parser.add_argument("--stentries", action='store_true', help="dump section table entries", default=False)          parser.add_argument("--objcode", action='store_true', help="dump objects", default=False)          parser.add_argument("--test", action='store_true', help="test switch", default=False) +        parser.add_argument("--test2", action='store_true', help="test switch 2", default=False)          parser.add_argument("--funcs", action='store_true', help="dump functions", default=False)          parser.add_argument("--objs", action='store_true', help="dump objects", default=False)          parser.add_argument("--dynsym", action='store_true', help="dump dynamic symbol table", default=False) @@ -1045,6 +1049,25 @@ class Global_Rewriter(object):      def __init__(self):          pass +class Rewriter(object): +    def __init__(self, path): +        so = openSO_r(path) +        self.elf = ELF(so) +        self.elf.init(64) +        shutil.copyfile(path, "/tmp/exe") +        self.file_w = open("/tmp/exe", "wb") +        self.magic_section_number = int() + +    def fix_section_offsets(self, section_name): +        magic_number = int() +        for i in range(0, byte2int(self.elf.elfhdr.e_shnum)): +            name = self.elf.read_section_name(byte2int(self.elf.shhdr[i].sh_name)) +            if section_name == name: +                self.magic_section_number = i + 1 + +    def fix_section_size(self, section_name): +        pass +  def main():      try:          argparser = CLIArgParser() @@ -1065,6 +1088,9 @@ def main():          elif argparser.args.dynsym: elf.dump_st_entries_dyn()          elif argparser.args.dlpath: elf.dump_section(".interp", True)          elif argparser.args.section: elf.dump_section(argparser.args.section, True) +        elif argparser.args.test2: +            rewriter = Rewriter(argparser.args.obj) +            rewriter.fix_section_offsets(".text")          elif argparser.args.test:              counter = 0              print(elf.dump_funcs(False)[10])  | 
