about summary refs log tree commit diff
path: root/frida_mode/test/bloaty/get_symbol_addr.py
diff options
context:
space:
mode:
authorllzmb <46303940+llzmb@users.noreply.github.com>2021-11-30 20:28:20 +0100
committerGitHub <noreply@github.com>2021-11-30 20:28:20 +0100
commitda13111117efdb70f81deb162bd9e64c9a7d778a (patch)
tree2d9dbe7aac1212e5729a0a744a5b37e957d0d8a0 /frida_mode/test/bloaty/get_symbol_addr.py
parentf2ff029cc25e81fec36abd0b8c676f1dd6a39c77 (diff)
parent5525f8c9ef8bb879dadd0eb942d524827d1b0362 (diff)
downloadafl++-da13111117efdb70f81deb162bd9e64c9a7d778a.tar.gz
Merge branch 'dev' into docs_edit_readme_frida_mode_qemu_mode
Diffstat (limited to 'frida_mode/test/bloaty/get_symbol_addr.py')
-rwxr-xr-xfrida_mode/test/bloaty/get_symbol_addr.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/frida_mode/test/bloaty/get_symbol_addr.py b/frida_mode/test/bloaty/get_symbol_addr.py
new file mode 100755
index 00000000..1c46e010
--- /dev/null
+++ b/frida_mode/test/bloaty/get_symbol_addr.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python3
+import argparse
+from elftools.elf.elffile import ELFFile
+
+def process_file(file, symbol, base):
+    with open(file, 'rb') as f:
+        elf = ELFFile(f)
+        symtab = elf.get_section_by_name('.symtab')
+        mains = symtab.get_symbol_by_name(symbol)
+        if len(mains) != 1:
+            print ("Failed to find main")
+            return 1
+
+        main_addr = mains[0]['st_value']
+        main = base + main_addr
+        print ("0x%016x" % main)
+        return 0
+
+def hex_value(x):
+    return int(x, 16)
+
+def main():
+    parser = argparse.ArgumentParser(description='Process some integers.')
+    parser.add_argument('-f', '--file', dest='file', type=str,
+                    help='elf file name', required=True)
+    parser.add_argument('-s', '--symbol', dest='symbol', type=str,
+                    help='symbol name', required=True)
+    parser.add_argument('-b', '--base', dest='base', type=hex_value,
+                    help='elf base address', required=True)
+
+    args = parser.parse_args()
+    return process_file (args.file, args.symbol, args.base)
+
+if __name__ == "__main__":
+    ret = main()
+    exit(ret)