summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xelfdump.py39
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)