ZLIB uncompress
ZLIB uncompress
我已经编写了一个小型应用程序,该应用程序应该解压缩以gzip/deflate格式编码的数据。
为了实现这一点,我正在使用 ZLIB 库,使用解压缩功能。
问题是该功能不起作用!用的话说,数据不是未压缩的!
我在这里发布代码:
int (*decompress)(PBYTE,PULONG,PBYTE,ULONG);
void DecodeData(PBYTE data,ULONG dataSize){
LoadLibrary("C:\zlib1.dll");
decompress=(int(*)(PBYTE,PULONG,PBYTE,ULONG))GetProcAddress(
GetModuleHandle("zlib1.dll"),"uncompress");
// Yeah I know the size is hardcoded and it's not right, but it's just a test,
// so nevermind
PBYTE decompressedData=(PBYTE)VirtualAlloc(NULL,300,MEM_COMMIT|MEM_RESERVE,
PAGE_EXECUTE_READWRITE);
ULONG maxSize=250;
decompress(decompressedData,&maxSize,data,dataSize);
MessageBox(0,(char*)decompressedData,0,MB_OK);//MessageBox shows no data, it's blank!
}
指向函数的指针被 GetProcAddress 成功获取,问题是函数返回 NULL(甚至没有 zlib 文档中列出的错误)
uncompress()
函数不会解压缩 gzip 数据,并且根据您所说的"压缩"是什么意思,它也可能不会解压缩它。
您指的是三种可能的格式,即实际的压缩数据,可能带有一些短标头和尾部,以标识流并在末尾提供一些检查数据。 有原始的放气数据,如 RFC 1951 所述。 有 RFC 1950 定义的 zlib 包装的 deflate 数据。 有 gzip 包装的 deflate 数据,由 RFC 1952 定义。
uncompress()
只会解压缩 zlib 包装的 deflate 数据。 它不会解压缩 gzip 包装的数据或原始压缩数据。
您没有提供要执行的操作的上下文。 但是,当您说"gzip/deflate"时,我可能会猜测您指的是HTTP内容编码选项的名称。 在这种情况下,由于不幸的名称选择,"deflate"内容编码指的是zlib包装的deflate数据,而不是原始数据。 uncompress()
将解压缩正确交付的 HTTP 压缩内容编码数据。
我说"正确交付",因为它可能不是。 同样,由于不幸的名称选择,以及Microsoft程序员无法实际读取HTTP规范,当客户端接受deflate内容编码时,IIS服务器将错误地提供原始的deflate数据而不是zlib包装的数据。 这导致客户必须尝试两种方式解码放气内容编码,看看其中一种是否有效,或者更好的方法是首先不接受放气编码。 如果客户端只接受 gzip 内容编码,则没有问题。
您可以使用 zlib 的inflateInit2()
、inflate()
和 inflateEnd()
函数来解码提到的任何格式,即 gzip 包装、zlib 包装和原始格式。 请阅读 zlib.h
中的文档以了解操作方法。
顺便说一下,uncompress()
函数返回一个整数,而不是指针。 因此,当您说该函数返回NULL
而不是它应该返回的内容时,我只能假设该 zlib 函数的接口未正确定义。
为什么在你的 GetProcAddress 中使用"解压缩",但尝试解压缩?您获得"解压缩"例程的地址!!
- 为char数组调整zlib-zpipe
- 基于boost的程序的静态链接——zlib问题
- 为什么 zlib 放气初始化调用一次不起作用?
- 安装 zlib 库仍然丢失错误
- ZLib GZIP Returning Z_BUF_ERROR(-5)
- 仅在 zlib c++ 库中强制动态编码
- zlib 膨胀在使用小缓冲区时会损坏
- 简单的安卓二进制崩溃与zlib
- zlib 添加的各种类型的目的是什么,我如何使用它们?
- boost zlib filter 在 Windows 中不起作用
- 解压缩串联的 zlib 流而不读取下一个字节
- 找不到所需的 Zlib 库
- 如何使用 emscripten 将使用 zlib 的项目转换为 javascript?
- 如何将 zlib 流转换为 PNG?
- C 从STD :: vector中充气Zlib
- 用Zlib解压缩文本字符串
- Cmake可以要求静态库(例如Zlib)
- 如何在Visual Studio 2017中使用ZLIB库
- 使用 boost zlib 从 std::vector 中的文件中读取压缩的 zraw 数据
- ZLIB uncompress