我正在尝试修补一个十六进制文件。 我有两个补丁文件(十六进制)名为“patch 1”和“patch 2”
要修补的文件是一个名为“file.bin”的16MB文件。
在过去的6到7个小时里,我尝试了很多不同的方法来找出如何做到这一点。我可以整天在文件中写入字符串,但我正在尝试执行以下操作:
用读取字节打开patch1.bin 打开带有读取字节的patch2.bin 用写字节打开file.bin
我想查找位置0xc010和0x7c010,并应用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和编程还不太熟悉,但我确实在努力钻研它并学习它,所以任何好的例子都会被检查,希望对我来说都是一个很好的学习课程:)
谢谢你们帮我找出我做错了什么:)
1.txt文件:
一份:
1.txt文件:
这应该给你一个线索。
您需要使用
r+b
模式编辑目标文件。wb
是不更新的写入模式,将截断现有文件。请查看http://docs.python.org/2/library/functions.html#open或fopen的操作系统手册页,以获取有关不同文件模式的详细信息。您只需要使用
seek
和write
。使用seek
跳到位置,使用write
覆盖现有数据。相关问题 更多 >
编程相关推荐