我正在尝试修补一个十六进制文件。
我有两个需要修补的文件 (hex),它们分别叫做 "patch 1" 和 "patch 2"。
需要被修补的文件是一个名为 "file.bin" 的 16 MB 文件。
我已经尝试了很多种不同的方法,花了6或7个小时来找出如何完成它。我可以一整天写入文件,但我正尝试做以下事情:
用读取字节打开 patch1.bin
用读取字节打开 patch2.bin
用写入字节打开 file.bin
我想要跳转到位置 0xc0010 和 0x7c0010,并应用 patch1.bin,
然后我想要跳转到 0x040000 并应用 patch2.bin。
所以总的来说,我将应用3个补丁,然后关闭 "file.bin"。
如果有人能给我一个示例,我会非常感激:)
我先尝试了这个:
patch1 = open("patch1", "r");
patch2 = open("patch2", "r");
main = open("file.bin", "w");
main.seek(0xC0010);
main.write(patch1);
main.seek(0x7C0010);
main.write(patch1);
main.seek(0x40000);
main.write(patch2);
main.close();
但是我被告知我试图将一个字符串写入文件,而这并不是我想要的,哈哈。然后我尝试了这个:
infile1 = open("patch1.bin", "rb")
new_pos1 = int("0x00", 16)
infile1.seek(new_pos1, 0)
infile2 = open('file.bin', 'wb')
new_pos2 = int('0xc0010', 16)
infile2.seek(new_pos2, 0xc0010)
chunk1 = int("6FFFE0", 16) #this is how long patch1 file is
data1 = infile1.read(chunk1)
with open("file.bin", "a") as outfile:
outfile.write(data1)
但是,无论我尝试什么,它都没有起作用,因为我无法将数据写入正确的偏移量。我确实几次成功地将 patch1 写入 file.bin,但它并没有在正确的偏移处进行补丁,事实上它删除了 file.bin 并仅仅复制了 patch1 到其位置。这当然是错误的。
需要提醒您的是,我对 Python 和编程都很新手,但我真的很努力地学习,所以任何好的例子都会被检查,并希望可以成为我良好的学习教材 :)
感谢大家帮助我找出我的错误 :)