Files
revng-revng/python/scripts/revng-merge-dynamic
2022-04-20 09:56:44 +02:00

83 lines
1.9 KiB
Python
Executable File

#!/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()