0

バイナリファイルをHEXとして変数に保持し、バイナリとしてファイルにダンプする次のスクリプトがあります.Linuxではすべて正常に動作しますが、Windowsでは失敗し、理由がわかりません:

import os, os.path
from ctypes import *
import sys, binascii

current_dir = r".\\"
startup = "4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000000000000000000000000000000000000000" # snipped, too big to have it here

def DumpStartupFile():
        startupbin=binascii.unhexlify(startup)
        o=open(current_dir+"\\startup.exe","w")
        o.write(startupbin)

if os.path.isfile(current_dir+"\\startup.exe"):
        True
else:
        DumpStartupFile()

Windowsで失敗する理由は何ですか?

4

1 に答える 1

2

バイナリ データを書き込むときは、常にファイルをバイナリ モードで開きます。

o=open(current_dir+"\\startup.exe","wb")
o.write(startupbin)

特に Windows では、テキスト モードでファイルを開くと、書き込み時に改行がプラットフォーム固有の値に変換されますが、これはバイナリ データでは望ましくない動作です。

open()関数のドキュメントから:

デフォルトでは、テキスト モードが使用されます。このモードでは'\n'、書き込み時に文字をプラットフォーム固有の表現に変換し、読み取り時に文字を元に戻すことができます。したがって、バイナリ ファイルを開くときは、ファイルをバイナリ モードで開くためにmode'b'値に追加する必要があります。これにより、移植性が向上します。(追加は、バイナリ ファイルとテキスト ファイルを異なる方法で処理しないシステムでも有用であり、ドキュメントとして機能します。)'b'

于 2013-03-12T14:29:39.227 に答える