You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

29 lines
867 B

#!/usr/bin/env python3
"""Patch a file with another file at offset. Useful for dirty DAT patching."""
import argparse
def main():
argparser = argparse.ArgumentParser()
argparser.add_argument("archive", help="File to be modified")
argparser.add_argument("file", help="File to patch in archive")
argparser.add_argument("offset", help="Offset as hex")
args = argparser.parse_args()
archive_path, input_file_path = args.archive, args.file
ofs = int(args.offset.lstrip("0x").rstrip("h"), 16)
patch(archive_path, input_file_path, ofs)
def patch(archive_path, input_file_path, ofs):
with open(input_file_path, "rb") as input_file:
input_data = input_file.read()
with open(archive_path, "rb+") as archive_file:
archive_file.seek(ofs)
archive_file.write(input_data)
if __name__ == "__main__":
main()