mirror of
https://github.com/AFLplusplus/AFLplusplus.git
synced 2025-06-15 03:18:07 +00:00
37 lines
1.1 KiB
Python
Executable File
37 lines
1.1 KiB
Python
Executable File
#!/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)
|