miau's blog?

patch for PerlScript 5.8.x.xxx

patch for PerlScript 5.8.7.813 - miau's blog?

以前こんなパッチ作りましたが、最後に追記してあるように 5.8.7.815 とか 5.8.7.817 とかだとパッチ適用に失敗します。変更箇所は同じなんですけど、CRC チェックに引っかかるのが原因。
今日 WDiff 触ったので、ついでにこのパッチの CRC チェックを解除しようと思ったんですが・・・「CRCエラー発生時」を「中止する」から「無視する」に変更した場合って単純に処理がスキップされるんですね。「CRC が違っても無視してパッチ当てる」意味かとばかり。

じゃあ WDiff 以外の方法でパッチ作るしか・・・というところでふと思ったんですが、ファイル中のバイナリ値を置換するだけなら Perl でやればいいですよね。コマンドラインから

cd /d C:\Perl\bin
perl -Mopen=IO,win32 -pi".OLD" -e"s/\xFF\x74\x24\x18\xFF\x15\xE8\x90\x1C\x28\x59\x8B\xF0\xFF\x74\x24\x10\x8B\xCB\x8D\x46\x02\x50\xE8\x64\xFF\xFF\xFF\x8B\xF8\x85\xFF\x74\x14/\x57\x57\x57\x57\x6A\xFF\xFF\x74\x24\x2C\x57\x57\xFF\x15\x74\x90\x1C\x28\x8B\xF0\x57\x8B\xCB\x40\x50\xE8\x62\xFF\xFF\xFF\x8B\xF8\x90\x90/" PerlSE.dll

こんな感じで実行。旧ファイルが PerlSE.OLD にバックアップされるので、そこそこ安全なはず。
改行コードが勝手に変更されるのを防ぐのに use open IO => ':win32' っぽいことやってるけど、本当にこれでいいのかちょっと自信なし。間違ってたら教えて下さい。>詳しい方

ちなみに
・ActivePerl 5.8.7.817
・ActivePerl 5.8.8.819
・ActivePerl 5.8.8.820
では動作確認済み。気が向いた方は他のバージョンでの確認もお願いします。

検証用スクリプトはこんな感じ。

# ああああああああああああああああああ
# ああああああああああああああああああ
# ああああああああああああああああああ
MsgBox('PerlSETest - OK');

PerlSETest.pls とかいう名前で保存して、Explorer から実行してください。
メッセージボックスが出たらパッチがちゃんと当てられてる感じ。パッチ当ててない場合は、たぶん何も起きない。(変なエラーになる可能性もあるけど)


(2007/01/30 追記)5.8.8.820 でも動くっぽい。


(2007/09/29 追記)

もっと楽に実行できるバージョンも作ってあります。

patch for PerlScript 5.8.x.xxx(PerlScript版) - miau's blog?

posted at 01:23:47 on 2006-09-24 by miau - Category: TextEditor No Trackbacks - Permalink

TrackBack

このエントリにトラックバックはありません
現在トラックバックは受け付けていません。

Comments

miau wrote:

追記age
2007-01-30 22:04:41

Add Comments

現在コメントは受け付けていません。
お手数ですが、 こちら のコメント欄にでも記載していただければと思います。