Dump.pl

#!/usr/local/bin/perl
# (c)copyleft 2017-3-19 : Coded by shun kinoshita / knuhs
use strict;
use vars qw/ %HashTBL %DataTBL /; # Global の扱いにする
use lib 'C:/Users/恂/Documents/MyDoc/tym33/apl3/lib';
                  # ライブラリに追加するモジュールを置く場所を指定する
use JPGvivisect;  # モジュール( JPGvivisect.pm )を指定する

my $directory = "C:/Users/恂/Documents/MyDoc/tym33/uploadDATA2";
my $jpgFile="IMG_0772.JPG";
my $jpgSTR;

# ファイルの大きさを調べる
    stat("$directory/$jpgFile"); my  $size = -s _;

# ファイルを読み込む
    open(JPEG, "$directory/$jpgFile") || die "開けません: $!";
    sysread(JPEG, $jpgSTR, $size) || die "入力エラー\n";
    # sysread を使わないと 改行コード(0x0D0A) が 0x0A となり
    # 0x0D が削除されてしまう

# 解析作業へ
my  $SGMsize = JPGvivisect(\$jpgSTR, $size, $directory, $jpgFile);
    if ( $SGMsize <= 0 )
    {   print "データに異常があり解析できません。\n";
        print "Dumpを継続しますか?\n";
        system("pause");
    }

# ダンプを開始します
    print "▼$jpgFile\n";
    Dumpit( \$jpgSTR );
    close(JPEG);
    exit;

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# (c) 2017-5-17 : Coded by shun kinoshita / knuhs
sub Dumpit
{
my $jpgRef = shift @_;
my ($c, $i);
my $pos = 0;
my $line = "[00000000:       0]:";

# start here
  print "    Hex  :  Dec    : +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F\n";
  print "---------:----------------------------------------------------------\n";

  $pos = 0;
  for( $i = 0; $i < $size; $i++)
  {
    $c = unpack( "C", substr($$jpgRef, $pos++, 1) );
    $line = $line . sprintf(" %02X", $c);
    if ( ($i+1)%16 == 0 )
    { print("$line\n"); $line = sprintf("[%08X:%8d]:", $i+1, $i+1); }
    # check End of File
  }
  print "$line(EOS)▼\n"; # End of String.
  print "\n▼($pos), $size\n";
}