我编写了一个小应用程序,它应该解压缩以 gzip/deflate 格式编码的数据。
为了做到这一点,我正在使用 ZLIB 库,使用 uncompress 函数。
问题是该功能不起作用!换句话说,数据不是未压缩的!
我在这里发布代码:
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 文档中列出的错误)