anchor.diff:      Result := ExtractFileName(ModuleName) + '!' + Result;
   end;
   
  +procedure TSymbols.GetExportFuncList(const ModuleName: string;
  +  BaseAddress: ULONG_PTR; Value: TStringList);
  +begin
  +  SymLoadModule(FProcess, 0, PAnsiChar(AnsiString(ModuleName)),
  +    nil, BaseAddress, 0);
  +  try
  +    if not SymEnumerateSymbols(FProcess, BaseAddress,
  +      @SymEnumsymbolsCallback, Value) then
  +    begin
  +      SymLoadModule(FProcess, 0, PAnsiChar(AnsiString(ModuleName)),
  +        nil, BaseAddress, 0);
  +      SymEnumerateSymbols(FProcess, BaseAddress,
  +        @SymEnumsymbolsCallback, Value)
  +    end;
  +  finally
  +    SymUnloadModule(FProcess, BaseAddress);
  +  end;
  +end;
  +
  +procedure TSymbols.Init(BaseAddress: ULONG_PTR; const ModuleName: string);
  +begin
  +  FModuleName := ModuleName;
  +  FBaseAddress := BaseAddress;
  +  SymLoadModule(FProcess, 0, PAnsiChar(AnsiString(ModuleName)),
  +    nil, BaseAddress, 0);
  +end;
  +
  +procedure TSymbols.Release;
  +begin
  +  SymUnloadModule(FProcess, FBaseAddress);
  +end;
  +
   end.
  
positive.code:   private
      FInited: Boolean;
      FProcess: THandle;
    public
      constructor Create(hProcess: THandle);
      destructor Destroy; override;
      function GetDescriptionAtAddr(Address, BaseAddress: ULONG_PTR;
        const ModuleName: string): string;
      procedure GetExportFuncList(const ModuleName: string;
        BaseAddress: ULONG_PTR; Value: TStringList);
    end;
  
negative.code:   Result := True;
  end;
  
  function TSymbols.GetDescriptionAtAddr(Address: ULONG_PTR): string;
  const
  {$IFDEF WIN64}
    SizeOfStruct = SizeOf(TImagehlpSymbol64);
    MaxNameLength = BuffSize - SizeOfStruct;
  var
    Symbol: PImagehlpSymbol64;
    Displacement: DWORD64;
  {$ELSE}
    SizeOfStruct = SizeOf(TImagehlpSymbol);
    MaxNameLength = BuffSize - SizeOfStruct;
  var
    Symbol: PImagehlpSymbol;
    Displacement: DWORD;
  {$ENDIF}
  begin
    Result := '';
    GetMem(Symbol, BuffSize);
    try
      Symbol^.SizeOfStruct := SizeOfStruct;
      Symbol^.MaxNameLength := MaxNameLength;
      Symbol^.Size := 0;
      if SymGetSymFromAddr(FProcess, Address, @Displacement, Symbol) then
      begin
        if Displacement = 0 then
          Result := string(PAnsiChar(@(Symbol^).Name[0]));
      end
      else
      begin
        //       
        SymLoadModule(FProcess, 0, PAnsiChar(AnsiString(FModuleName)), nil, FBaseAddress, 0);
        if SymGetSymFromAddr(FProcess, Address, @Displacement, Symbol) then
        begin
          if Displacement = 0 then
            Result := string(PAnsiChar(@(Symbol^).Name[0]));
        end;
      end;
    finally
      FreeMem(Symbol);
    end;
    if Result <> '' then
      Result := ExtractFileName(FModuleName) + '!' + Result;
  end;
  
  function TSymbols.GetDescriptionAtAddr(Address, BaseAddress: ULONG_PTR;
    const ModuleName: string): string;
  const
  {$IFDEF WIN64}
    SizeOfStruct = SizeOf(TImagehlpSymbol64);
    MaxNameLength = BuffSize - SizeOfStruct;
  