0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Perlでバイナリいじるときの備忘録

Last updated at Posted at 2018-09-12

Windows(とか)でPerlを使えるようにする

ActivePerlをサイトから入手

コマンドプロンプトで試す

いい方法がわからんかった。
非Unixシステムで実行1とPerlデバッガー2のあたりを参考にした。

こんな感じで試す
# 簡単に試したい場合はperl -e [command]で実行
perl -e "print 'Hello, world!';"
# もうちょっと色々試したい場合はPerlデバッガを起動
perl -d -e 42

バイナリをいじる

とあるファイルのバイナリを編集しようと思って、どのプログラムが簡単だろうとネットを眺めてて、決め手となったのがこのページ3

5C がバイナリの16進表記であると仮定して、
#perl -p -i.back -e 's/\x5C\x5C/\x5C/g' FILENAME

上記のようにお手軽にバイナリいじることができるって分かってのでPerlにすることにした。
Packについては、変数使っていると意図通りに動かなかったので、そういった部分についてはこのサイト4を参考にして個別でPackした。

バイナリ
$suuji = 1;# 数字だよ
$packedSuuji = pack(H2,0.$suuji);#'03'(文字型)をPackしないと想定どおり動かないぞ
$contents =~ s/00\x02/00$packedSuuji/g;#Perlでは「.」で結合するけどここではいらないよ(深く考えない)
# \x30 \x30 \x01 って扱いになる

$missPackedSuuji = pack(H2,$suuji);
$missContents =~ s/00\x02/00$missPackedSuuji/g;
# \x30 \x30 \x0xxx って扱いになる

ファイル入出力

Qiitaの記事とかその他を読んでそれっぽくやった。

Optionについて

わかりやすいサイトがあったのでその記事5 6を参考に作る。
これを使うと勝手に短めのオプション指定もできるらしい(オプションの頭文字がかぶったら特定できる部分まで書けばOK)。
とくにEmptyPage.jp様の記事[^1]はとてもわかりやすく、感謝の気持ちでいっぱいになった。

test.pl -no=2 -type=others
test.pl -n=2 -t=others
test.pl -n 2 -t others
test.pl --n 2 --t others
↑どれもおなじ意味だよ

test.pl
# モジュールの読み込みと関数のインポート
use Getopt::Long 'GetOptions';

# デフォルト値設定
my $no = 1;
my $type = 'default';

# オプション受け取り
GetOptions(
 'no=i' => $no,
 'type=s' => $type
);
  1. 非 Unix システムでの #! とクォート

  2. The Perl Debugger

  3. Perlでバイナリ楽そうって思ったきっかけ

  4. Perl の数値変換

  5. 参考サイト:Perl スクリプトでのコマンドラインオプション処理

  6. 参考サイト:Getopt::Long - コマンドラインオプションを処理する

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?