发了不少教程,资料,都是转载别人的,这篇是我自己写的。
5 ^' m( i8 x% O7 e* c S( R由于时间有限,写得很简明,不懂的欢迎提问。
- l4 |/ @. R$ b( L0 F5 Z* r5 A$ ^
打包文件一般是如下格式
# _( V7 }& |8 G! }2 ?0 y+ y T
% a0 t3 F7 ]# `! @文件头 4 H* K7 E1 t! s, X
文件名表
8 x. w5 o& P6 y6 k" v' E数据块
6 Z& [3 r- |- {7 {) w
! s! A) P B/ M2 Y: Q+ [文件名表一般是如下形式 U0 G& D. Y: ^- K
7 E" t1 L( B+ YFilename1+相关的2进制信息 " ?4 s/ v) h1 ~) E6 ~4 f7 m
Filename2+相关的2进制信息
7 T( P% m- s0 o; ^, ^: oFilename3+相关的2进制信息 / a; y; X% K* y% T: j8 z
。。。
) u6 d6 V; t" b6 _2 p1 W& {2 ?- j3 U( d# s( u* T/ i( e
相关的2进制信息里一般会有文件偏移量和文件字节数。但是如何知道相关的2进制信息中哪些是文件偏移量和文件字节数呢?其实很简单。 ' |% I+ Z1 _/ \2 f/ u3 z
+ K' R e% |3 L3 s% E4 o# a7 E文件偏移量 ( F7 A) }. q3 q) e
每个文件名表项的长度是一样的,那么最后一个文件名表项结束以后是什么呢。" w, i' v m6 T, _- A
对了,是第一个文件。在2进制编辑器里看一下这个偏移量,比如0002F4D2 ,
, C* x2 p0 v+ h在第一个文件名表项中寻找D2F40200,就能找到文件偏移量的保存位置。
2 b/ l5 S8 W5 d' f) t# F注意,偏移量的保存顺序是高低位颠倒的。7 T3 x4 ~$ B2 Z1 n
`: z" L7 o' D6 r: R- x9 K2 p
文件字节数7 C6 b) y6 J: @- g- S, q: d6 Y$ D3 N
找到了文件偏移量的保存位置后,把第1个和第2个文件偏移量相减,得出第一个文件的字节数。4 b( L2 Z @6 O8 D7 Z
在第1个文件名表项中寻找这个字节数的2进制值,注意,保存顺序也是高低位颠倒的。也就找到了文件字节数的保存位置。
4 N1 m6 g9 g* }, X5 J2 c
* W% u2 r2 I" v* e; \4 M4 x知道了每个文件的文件偏移量,文件字节数,制作打包器,解包器自然就很容易了。 |