6

hexファイルにパッチを適用しようとしています。「patch1」と「patch2」という名前の2つのパッチファイル(16進数)があります

パッチを適用するファイルは、「file.bin」という名前の16MBファイルです。

私はそれを行う方法を理解するために過去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とプログラミングに不慣れであることを思い出させなければなりませんが、私は本当にそれに足を踏み入れて学ぼうとしているので、良い例があれば調べて、うまくいけば私にとって良い学習レッスンになるでしょう:)

私が間違っていたことを理解するのを手伝ってくれたみんなとギャルに感謝します:)

4

3 に答える 3

11

seekとを使用するだけですwriteseek位置にジャンプしwrite、既存のデータを上書きするために使用します。

with file('patch1.bin', 'rb') as fh:
    patch1 = fh.read()

with file('patch2.bin', 'rb') as fh:
    patch2 = fh.read()

with file('file.bin', 'r+b') as fh:
    # apply patch1
    fh.seek(0xc0010)
    fh.write(patch1)
    fh.seek(0x7c0010)
    fh.write(patch1)
    # apply patch2
    fh.seek(0x040000)
    fh.write(patch2)
于 2013-02-01T09:58:22.733 に答える
3

1.txt:

asdf

a.py:

with open('1.txt','r+b') as f:
    f.seek(2)
    f.write('D')

1.txt:

asDf

これはあなたに手がかりを与えるはずです。

于 2013-02-01T10:14:02.750 に答える
1

r+bターゲットファイルを編集するには、このモードを使用する必要があります。wbは更新せずに書き込むためのモードであり、既存のファイルを切り捨てます。さまざまなファイルモードの詳細については、 http://docs.python.org/2/library/functions.html#openまたはOSのマニュアルページでfopenを確認してください。

于 2013-02-01T10:13:40.207 に答える