我想修補一個十六進制文件。 我有兩個名爲「patch 1」和「patch 2」的補丁文件(十六進制)用Python修改二進制文件
要修補的文件是名爲「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和編程,但我真的想挖掘我的腳,並學習,所以任何好的例子將被檢查,並希望對我來說是一個很好的學習課程:)
感謝球員,併爲幫助我弄清楚加侖我在做什麼錯了:)
你試過了什麼?引用你的代碼。 –
這不是一個「十六進制文件」;它是一個*二進制*文件。十六進制文件將是一個包含十六進制數字的文本文件。這些通常用於*代表*二進制數據,當你想處理文本。 – unwind