#!/usr/bin/env python3 # # This file is distributed under the MIT License. See LICENSE.md for details. # import argparse import sys from revng.cli.merge_dynamic import merge_dynamic from revng.cli.merge_dynamic.log import set_verbose def main(): parser = argparse.ArgumentParser( description="Merge the dynamic portions of the translate ELF with the one from the" " host ELF." ) parser.add_argument( "to_extend", metavar="TO_EXTEND", help="The ELF to extend.", ) parser.add_argument( "source", metavar="SOURCE", help="The original ELF.", ) parser.add_argument( "output", metavar="OUTPUT", nargs="?", default="-", help="The output ELF.", ) parser.add_argument( "--verbose", action="store_true", help="Print debug information and warnings.", ) parser.add_argument( "--base", metavar="ADDRESS", default="0x400000", help="The base address where dynamic object have been loaded.", ) parser.add_argument( "--merge-load-segments", action="store_true", help="Merge the LOADed segments from the source ELF into the output ELF.", ) args = parser.parse_args() set_verbose(args.verbose) base = int(args.base, base=0) if args.output == "-": output_file = sys.stdout else: output_file = open(args.output, "wb") # noqa: SIM115 with output_file, open(args.source, "rb") as source_file, open( args.to_extend, "rb" ) as to_extend_file: retcode = merge_dynamic( to_extend_file, source_file, output_file, base=base, merge_load_segments=args.merge_load_segments, ) return retcode def _main(): retcode = main() sys.exit(retcode) if __name__ == "__main__": _main()