diff options
-rwxr-xr-x | elfdump.py | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/elfdump.py b/elfdump.py index 88fae22ecba..a683a592ac1 100755 --- a/elfdump.py +++ b/elfdump.py @@ -24,7 +24,7 @@ def stripped(elf): def is_dynamic(elf): return find_program_segment(elf, Elf.PhType.interp) is not None -def dynamic_by_tag(tag): +def dynamic_by_tag(elf, tag): dynamic = find_section_header(elf, Elf.ShType.dynamic) if not dynamic: return None @@ -33,8 +33,8 @@ def dynamic_by_tag(tag): if entry.tag_enum == tag: yield entry.value_str -def dynamic_by_tag_first(tag): - values = dynamic_by_tag(tag) +def dynamic_by_tag_first(elf, tag): + values = dynamic_by_tag(elf, tag) try: return next(values) except StopIteration: @@ -58,13 +58,26 @@ def linkage(elf): print(name) -elf = Elf.from_file(sys.argv[1]) -print("ELF binary, {} {}, for {}".format({Elf.Bits.b32: "32-bit", Elf.Bits.b64: "64-bit"}[elf.bits], - {Elf.Endian.le: "little-endian", Elf.Endian.be: "big-endian"}[elf.endian], - elf.header.machine.name)) -print("Stripped" if stripped(elf) else "Not stripped") -print("Dynamically linked" if is_dynamic(elf) else "Statically linked") -print(f"SONAME {dynamic_by_tag_first(Elf.DynamicArrayTags.soname)}") -print(f"RPATH {dynamic_by_tag_first(Elf.DynamicArrayTags.rpath)}") -print(f"RUNPATH {dynamic_by_tag_first(Elf.DynamicArrayTags.runpath)}") -print(f"NEEDED {', '.join(dynamic_by_tag(Elf.DynamicArrayTags.needed))}") +def main(): + with Elf.from_file(sys.argv[1]) as elf: + def print(s): + pass + print("ELF binary, {} {}, for {}".format({Elf.Bits.b32: "32-bit", Elf.Bits.b64: "64-bit"}[elf.bits], + {Elf.Endian.le: "little-endian", Elf.Endian.be: "big-endian"}[elf.endian], + elf.header.machine.name)) + print("Stripped" if stripped(elf) else "Not stripped") + print("Dynamically linked" if is_dynamic(elf) else "Statically linked") + print(f"SONAME {dynamic_by_tag_first(elf, Elf.DynamicArrayTags.soname)}") + print(f"RPATH {dynamic_by_tag_first(elf, Elf.DynamicArrayTags.rpath)}") + print(f"RUNPATH {dynamic_by_tag_first(elf, Elf.DynamicArrayTags.runpath)}") + print(f"NEEDED {', '.join(dynamic_by_tag(elf, Elf.DynamicArrayTags.needed))}") + +def test(): + with Elf.from_file(sys.argv[1]) as elf: + soname = dynamic_by_tag_first(elf, Elf.DynamicArrayTags.soname) + rpath = dynamic_by_tag_first(elf, Elf.DynamicArrayTags.rpath) + runpath = dynamic_by_tag_first(elf, Elf.DynamicArrayTags.runpath) + needed = list(dynamic_by_tag(elf, Elf.DynamicArrayTags.needed)) + +import timeit +print(timeit.timeit("test()", number=1000, globals=globals()) / 1000) |