Распаковка zlib

Тема в разделе "WASM.WIN32", создана пользователем Sunzer, 13 фев 2011.

  1. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    Нужно распаковать сжатый zlib'ом массив на MASM, возможно есть API в системе для этого?

    http://www.winimage.com/zLibDll/index.html

    http://www.winimage.com/zLibDll/zlib125_masm_obj.zip

    Как эти объектники использовать в своем проекте?

    В общем подскажите самый оптимальный вариант.
     
  2. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Как вариант?
    imho так проще всего вообще зиповать (ну и раззиповать) их через vbs - скрипты.
    Может покажется несерьезным, но вот так работает. )))
    Код (Text):
    1. ; from fakedminded/berniee [EOF-Project]  
    2. .586
    3. .model flat,stdcall
    4. option casemap:none
    5.  
    6. include \masm32\include\kernel32.inc
    7. include \masm32\include\user32.inc
    8. include \masm32\include\windows.inc
    9.  
    10. includelib \masm32\lib\kernel32.lib
    11. includelib \masm32\lib\user32.lib
    12.  
    13. .data
    14. vbs db  'Dim  oApp',13,10
    15.     db  'FileName = WScript.Arguments(0)',13,10
    16.     db  'ToBeZipped =WScript.Arguments(1)',13,10
    17.     db  'Set oApp = CreateObject("Shell.Application")',13,10
    18.     db  'oApp.NameSpace(FileName).CopyHere ToBeZipped',13,10
    19.     db  'Do Until oApp.NameSpace(FileName).items.Count = 1',13,10
    20.     db  'wScript.Sleep(100)',13,10,'Loop',13,10,0
    21.  
    22. zip_header db 80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    23. q_t db ' "',0
    24. command db "wscript zip.vbs",0
    25. vbs_file db "zip.vbs",0
    26. zip_file db "packed.zip",0
    27. slash db "\",0
    28.  
    29. .data?
    30. bwr dd ?
    31. buffer db 256 dup(?)
    32. buffer_ db 256 dup(?)
    33.  
    34. .code
    35. start:
    36.  
    37. invoke CreateFile,offset vbs_file,40000000h,0,0,2,0,0
    38. push eax
    39. invoke lstrlen,offset vbs
    40. mov edx,[esp]
    41. invoke WriteFile,edx,offset vbs,eax,offset bwr,0
    42. pop eax
    43. invoke CloseHandle,eax
    44.  
    45. invoke CreateFile,offset zip_file,40000000h,0,0,2,0,0
    46. push eax
    47. invoke WriteFile,eax,offset zip_header,22,offset bwr,0
    48. pop eax
    49. invoke CloseHandle,eax
    50.  
    51. invoke lstrcat,offset buffer,offset command      ;lots of lstrcat() :/
    52. invoke lstrcat,offset buffer,offset q_t
    53. invoke GetCurrentDirectory,256,offset buffer_
    54. invoke lstrcat,offset buffer_,offset slash
    55. invoke lstrcat,offset buffer_,offset zip_file
    56. invoke lstrcat,offset buffer,offset buffer_
    57. invoke lstrcat,offset buffer,offset q_t
    58. invoke lstrcat,offset buffer,offset q_t
    59. invoke RtlZeroMemory,offset buffer_,256
    60. invoke GetModuleFileName,0,offset buffer_,256
    61. invoke lstrcat,offset buffer,offset buffer_
    62. invoke lstrcat,offset buffer,offset q_t
    63.  
    64. invoke WinExec,offset buffer,0
    65. invoke Sleep,1000               ;time for the script to start
    66. invoke DeleteFile,offset vbs_file
    67. invoke MessageBox,0,offset zip_header,offset buffer,0
    68.  
    69. exit:
    70. invoke ExitProcess,0
    71. end start
    Но на машине нужно разрешить выполнение vbs - предварительно. )))
     
  3. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Есть LZInit, LZOpenFile, LZClose и LZRead, но они умеют только распаковку и никакого отношения к zlib не имеют. Зато присутствуют во всех версиях винды как минимум с 98 года прошлого тысячелетия и при том до сих пор не помечены как "obsolete". Архиватор тоже идёт с виндой и ныне называется cabarc.exe.
     
  4. polotenchik

    polotenchik New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2011
    Сообщения:
    33
    RtlDecompressBuffer это не оно?
     
  5. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    Решил использовать aPLib, RtlDecompressBuffer какие алгоритмы можно им расжать?
     
  6. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    RtlDecompressBuffer это lz
     
  7. polotenchik

    polotenchik New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2011
    Сообщения:
    33
    Да точно, это LZ77, ошибся я.