⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unpack.pas

📁 PEZIP捆绑壳delphi源代码 一份不错的源码
💻 PAS
字号:
unit Unpack;

interface

procedure DecompressBuff(const InBuff: Pointer; InBytes: Integer;
  const OutBuff: Pointer; BufSize: Integer);

implementation

const
  zlib_version = '1.0.4';

type
  TAlloc = function (AppData: Pointer; Items, Size: Integer): Pointer; register;
  TFree = procedure (AppData, Block: Pointer); register;

  TZStreamRec = packed record
    next_in: PChar;
    avail_in: Integer;
    total_in: Integer;
    next_out: PChar;
    avail_out: Integer;
    total_out: Integer;
    msg: PChar;
    internal: Pointer;
    zalloc: TAlloc;
    zfree: TFree;
    AppData: Pointer;
    data_type: Integer;
    adler: Integer;
    reserved: Integer;  
  end;

{$L obj\inflate.obj}
{$L obj\inftrees.obj}
{$L obj\adler32.obj}
{$L obj\infblock.obj}
{$L obj\infcodes.obj}
{$L obj\infutil.obj}
{$L obj\inffast.obj}

procedure adler32; external;
procedure inflate_trees_bits; external;
procedure inflate_trees_dynamic; external;
procedure inflate_trees_fixed; external;
procedure inflate_trees_free; external;

procedure _memset(P: Pointer; B: Byte; count: Integer); cdecl;
begin
  FillChar(P^, count, B);
end;

procedure _memcpy(dest, source: Pointer; count: Integer); cdecl;
begin
  Move(source^, dest^, count);
end;

function inflateInit_(var strm: TZStreamRec; version: PChar;
  recsize: Integer): Integer; external;
function inflate(var strm: TZStreamRec; flush: Integer): Integer; external;
function inflateEnd(var strm: TZStreamRec): Integer; external;
function inflateReset(var strm: TZStreamRec): Integer; external;

function AllocMem(Size: Cardinal): Pointer;
begin
  GetMem(Result, Size);
  FillChar(Result^, Size, 0);
end;

function zlibAllocMem(AppData: Pointer; Items, Size: Integer): Pointer; register;
begin
  Result:= AllocMem(Items * Size);
end;

procedure zlibFreeMem(AppData, Block: Pointer); register;
begin
  FreeMem(Block);
end;

procedure DecompressBuff(const InBuff: Pointer; InBytes: Integer;
  const OutBuff: Pointer; BufSize: Integer);
var
  strm: TZStreamRec;
begin
  FillChar(strm, SizeOf(strm), 0);
  strm.zalloc:= zlibAllocMem;
  strm.zfree:= zlibFreeMem;
  strm.next_in:= InBuff;
  strm.avail_in:= InBytes;
  strm.next_out:= OutBuff;
  strm.avail_out:= BufSize;
  inflateInit_(strm, zlib_version, SizeOf(strm));
  try
    inflate(strm, 4);
  finally
    inflateEnd(strm);
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -