我正在尝试修补十六进制文件。我有两个名为“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 和编程的新手,但我真的很想深入研究它并学习,所以任何好的例子都会被检查,希望对我来说是一个很好的学习课 :)
感谢伙计们帮助我弄清楚我做错了什么:)