[讨论]apLib的使用
发表于:
2011-3-25 20:30
11562
看了这个使用apLib的帖子,很有感触http://bbs.pediy.com/showthread.php?t=94815 ,把几个常用的apLib的函数整理了一下,高手飘过,基础的东西。。。。
压缩过程:
1.调用aP_max_packed_size得到存放压缩文件的空间大小
2.调用aP_workmem_size得到工作空间大小
3.调用aPsafe_pack
5.WirteFile写入文件
解压过程:
1.调用aPsafe_get_orig_size得到解压后文件大小
2.调用aPsafe_depack解压
3.WirteFile写入解压后的文件
——————————————————————————————————
常用函数解析:
size_t aP_max_packed_size( size_t input_size )
参数:未压缩的数据大小
返回值:压缩后的数据可能的所需要的最大值
Computes the maximum possible compressed size possible when
compressing input_size bytes of incompressible data.
size_t aP_workmem_size( size_t input_size )
计算aP_pack函数所需要的workmem[] buffer的大小
参数:未压缩的数据的字节数
返回值: work buffer所需要的空间长度,总是返回 640k (640*1024). size_t aPsafe_pack( const void *source,
void *destination,
size_t length,
void *workmem,
int (*callback)(size_t, size_t, size_t, void *),
void *cbparam )
函数aP_pack的封装函数,添加了一个头部,头部包含了原始数据的大小
和原始数据的CRC检验值
参数:
source - 指向被压缩数据的指针
destination - 存储压缩数据的指针.
length - 原始数据(未压缩数据)的字节数.
workmem - 压缩时指向工作空间的指针
callback - 回调函数的指针,也可以为NULL
cbparam - 回调函数的参数
返回值:
成功返回压缩后数据的字节数,失败返回APLIB_ERROR
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> size_t aPsafe_get_orig_size( const void *source )
返回解压后数据的长度
参数:
source -被压缩的数据的指针
返回值:
成功解压后的数据长度,失败APLIB_ERROR size_t aPsafe_depack( const void *source,
size_t srclen,
void *destination,
size_t dstlen )
函数aP_depack_asm_safe的封装函数,函数检查压缩数据的CRC32校验值
参数:
source - 指向压缩后数据的指针
srclen - 压缩后的数据的字节数
destination - 解压后的数据存放空间的指针
dstlen - 解压后数据的字节数
返回值:
成功返回解压后的数据大小 ,错误返回APLIB_ERROR >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
具体的实例还是看:http://bbs.pediy.com/showthread.php?t=94815
附件为apLib的使用说明,头文件,库文件。。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
上传的附件: