我已經編碼了一個應用程序,該應用程序應該解壓縮以gzip/deflate格式編碼的數據。ZLIB解壓縮
爲了做到這一點,我使用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的文檔中列出)
在此先感謝=)
你爲什麼使用'PAGE_EXECUTE_READWRITE'?如果您將未驗證的數據添加到其中,則永遠不應該使頁面可執行。另外爲什麼從硬編碼路徑動態加載庫?爲什麼不直接給zlib1.lib以便將動態符號表添加到可執行文件中? – datenwolf
調用解壓縮後,maxSize的值是多少? – Attila
@Attila:值保持不變:250,沒有變化... – Ananas