aboutsummaryrefslogtreecommitdiffstats
path: root/bfd/load.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xbfd/load.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/bfd/load.py b/bfd/load.py
index 08adfc5..ae984c8 100755
--- a/bfd/load.py
+++ b/bfd/load.py
@@ -24,6 +24,8 @@ class CLIArgParser(object):
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("--dynsym", action='store_true', help="dump dynamic symbol table", default=False)
+ parser.add_argument("--dlpath", action='store_true', help="dump dynamic linker path", default=False)
+ parser.add_argument("--section", type=str, help="dump a section")
self.args = parser.parse_args()
if self.args.obj is None:
raise Exception("no object file provided. please specify an object with --obj.")
@@ -296,6 +298,7 @@ class ELF(object):
self.symbol_table_e = []
self.data_section = []
self.text_section = []
+ self.dlpath = str()
def init(self, size):
self.size = size
@@ -449,6 +452,36 @@ class ELF(object):
print(name)
return ret_list
+ def dump_section(self, section_name):
+ for section in self.shhdr:
+ name = self.read_section_name(byte2int(section.sh_name))
+ if name == section_name:
+ self.so.seek(byte2int(section.sh_offset))
+ obj = self.so.read(byte2int(section.sh_size))
+ if section_name == ".interp": self.dlpath = repr(obj)
+ count = int()
+ strrep = []
+ for byte in obj:
+ if count%16 == 0:
+ for ch in strrep:
+ if ord(ch) > 16: print(ch, end = '')
+ else: pass
+ print()
+ strrep = []
+ print(format(count, "06x"), ': ', end='')
+ strrep.append(str(chr(byte)))
+ print(format(byte, '02x') + ' ', end='')
+ else:
+ strrep += str(chr(byte))
+ print(format(byte, '02x') + ' ', end='')
+ count += 1
+ for i in range(0, 16-count%16): print(" ", end="")
+ for ch in strrep:
+ if ord(ch) > 16: print(ch, end = '')
+ else: pass
+ print()
+ return self.dlpath
+
def dump_obj_size(self, stt_type, dump_b):
ret_list = []
for entry in self.string_tb_e:
@@ -706,6 +739,8 @@ def main():
elif argparser.args.test: elf.dump_symbol_string(ELF_ST_TYPE.STT_FUNC, True)
elif argparser.args.test: elf.dump_symbol_string(ELF_ST_TYPE.STT_OBJECT, True)
elif argparser.args.dynsym: elf.dump_st_entries_dyn()
+ elif argparser.args.dlpath: elf.dump_section(".interp")
+ elif argparser.args.section: elf.dump_section(argparser.args.section)
except:
variables = globals().copy()
variables.update(locals())