|
$arg_num
?
=
?
@ARGV
;

(
$arg_num
?
==
?
1
)?
||
?
die
(
"
usage:?perl?$0?[file]\n
"
);

open
(FH
,
?
$ARGV
[
0
])?
||
?
die
(
"
Failed?to?open?$ARGV[0]\n
"
);

$flag
?
=
?
0
;
$begin_symbol
?
=
?
'
|HEX?|0?|1?|2?|3?|4?|5?|6?|7?|8?|9?|A?|B?|C?|D?|E?|F?|
'
;

while
(
$line
?
=
?
<
FH
>
)
{
????
chop
(
$line
);
????
if
(
1
?
!=
?
$flag
?
||
?
$line
?
=~
?
/^\|
0
\
s{
3
}
\|/
)
????{
????????
$flag
?
=
?
1
;
????????
@bytes
?
=
?
split
(
/\|/,
?
$line
);
????????
for
(
$i
?
=
?
2
;?
$i
?
<
?
@bytes
;?
$i
++
)
????????{
????????????
push
(
@data
,
?
$bytes
[
$i
]);
????????}
????}
}

#
print?join("?",?@data),?"\n";
$beginOffset
?
=
?
3
;
$group
?
=
?
3
;

$group
?
=
?
3
?
-
?
$group
;

$pattern1
?
=
?
0x1
?
<<
?(
2
?
*
?
$group
);
$pattern2
?
=
?
0x2
?
<<
?(
2
?
*
?
$group
);

$count
?
=
?
0
;

for
(
$i
?
=
?
$beginOffset
;?
$i
?
<
?
@data
;?
$i
?
+=
?
4
)
{
????
$num
?
=
?
0
;
????
for
(
$j
?
=
?
0
;?
$j
?
<
?
4
;?
$j
++
)
????{
????????
$part
[
$j
]?
=
?((
hex
(
$data
[
$i
+
$j
])?
&
?(
0x1
?
<<
?(
2
?
*
?
$group
)))?
>>
?(
2
?
*
?
$group
)?
<<
?
1
)?
|
????????????????????((
hex
(
$data
[
$i
+
$j
])?
&
?(
0x2
?
<<
?(
2
?
*
?
$group
)))?
>>
?(
2
?
*
?
$group
)?
>>
?
1
);
????????
$num
?
=
?(
$num
?
<<
?
2
)?
|
?
$part
[
$j
];
????}

????
if
(
$num
?
<
?
16
)
????{
????????
print
?
"
0
"
;
????}
????
printf
?
"
%x?
"
,
?
$num
;
????
if
(
++
$count
?
%
?
16
?
==
?
0
)
????{
????????
print
?
"
\n
"
;
????}
}

close
(FH);
|