亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? vars.pas

?? SrcDecompiler is about creating a Delphi program decompiler. The program is written for Delphi 4 or
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
            Result := Format('%s F%d: %s;', [Result, I, GetXTypeName(I)]);
            if Types[I] = Pointer(xtArray) then
              Inc(I, 3)
            else
              Inc(I);
          end;
          Result := Result + ' end = (';
          I := 0;
          J := 0;
          while I <= Types.Count -1 do
          begin
            Result := Format('%sF%d: %s; ', [Result, I, GetXTypeInitName(I, J)]);
            Inc(J, GetXTypeSize(I));
            if Types[I] = Pointer(xtArray) then
              Inc(I, 3)
            else
              Inc(I);
          end;
          Result[Length(Result) -1] := ')';
        end
      finally
        Types.Free;
      end;
    end;
  end;

begin
  case AType.TypeKind of
    etkUnknown: // Add the var and its type.
               Result := Format('  %s: %s;', [Name, GetTypeName]);
    etkUTInteger: Result := Format('  %s = %d;', [Name, PInteger(InitValue)^]);
    else
      raise EDecompilerError.Create('Unsupported Type');
  end;
end;

procedure TVar.SetVarSize(Value: Integer);
begin
  FVarSize := Value;
  ReAllocMem(FInitValue, Value);
  FillChar(FInitValue^, Value, 0);
end;

function TVar.IsRefAddress(AAddress: PChar): Boolean;
begin
  Result := (AAddress >= Address) and (AAddress < Address + Size);
end;

procedure TVar.SetAppendBefore(Value: TAppendType);
begin
  if Value <> FAppendBefore then
  begin
    FAppendBefore := Value;
  end;
end;

procedure TVar.SetAppendAfter(Value: TAppendType);
begin
  if Value <> FAppendAfter then
  begin
    FAppendAfter := Value;
  end;
end;

{ TVarInfos }

procedure TVarInfos.LoadVars;
var
  I, J: Integer;
  VarList: TList;
  DC: TDecompItem;
  NMInfo: TNameManglingInfo;
  VarInfo: TVar;
resourcestring
  SUnitNotFound = 'Unit name %s not found';
  SVarAlreadyHasAName = 'Var already has the name %s, so it can''t be set to %s.';
  SVarAlreadyHasAUnit = 'Var already has a unit %s, so it can''t be set to %s.';
  SAddressAlreadySet = 'Var address already set to %p, so it can''t be set to %p.';
begin
  with TPEFileClass(PEFileClass) do
  begin
    varList := TList.Create;
    try
      if ProjectType = ptPackage then
        // Load vars from the peexports.
        for I := 0 to PEExports.Count -1 do
        begin
          NMInfo := GetNameManglingInfo(PEExports[I].Name);
          // Exported item must be a var and must be in the data section.
          if (PEExports[I].Address >= Data) and (PEExports[I].Address < Data + DataSize) and
             (NMInfo.NMType = eitVar) and (VarList.IndexOf(PEExports[I].Address) = -1) and
             (IndexOfAddress(PEExports[I].Address) = -1) then
          begin
            VarList.Add(PEExports[I].Address);
          end;
        end;
      // Load the vars, the start at the first
      // Search all items in the BSS section.
      for I := 0 to Fixups.Count -1 do
      begin
        if (Fixups[I].FixupType = 3) and (PPChar(Fixups[I].Address)^ >= Data) and
           (PPChar(Fixups[I].Address)^ < BSS + BSSSize) and
           (varList.IndexOf(PPChar(Fixups[I].Address)^) = -1) and
           (IndexOfAddress(PPChar(Fixups[I].Address)^) = -1) then
        begin
          VarList.Add(PPChar(Fixups[I].Address)^);
        end;
      end;

      VarList.Sort(ListSimpleSort);

      // Create the var.
      for I := 0 to VarList.Count -1 do
      begin
        J := IndexOfAddress(VarList[I]);
        if J = -1 then
          VarInfo := TVar.Create(Self)
        else
          VarInfo := Items[J];

        with VarInfo do
        begin
          // Set the addresses.
          if (Address <> nil) and (Address <> VarList[I]) then
            raise EDecompilerError.CreateFmt(SAddressAlreadySet, [Pointer(Address), Pointer(VarList[I])]);
          Address := VarList[I];
          RefAddress := VarList[I];
          // calculate the Size.
          if Size = 0 then
          begin
            DC := TPEFileClass(PEFileClass).FindDecompItemAfter(VarList[I]);
            if I = VarList.Count -1 then
            begin
              if (DC <> nil) and (DC.Address < BSS + BSSSize) then
                Size := DC.Address - Address
              else
                Size := BSS + BSSSize - Address;
            end
            else
            begin
              if (DC <> nil) and (DC.Address < VarList[I+1]) then
                Size := DC.Address - VarList[I]
              else
                Size := Integer(VarList[I+1]) - Integer(VarList[I]);
            end;
          end;
          
          if VarList[I] < Data + DataSize then
            InitValue := VarList[I]
          else
            VarConst := [vtVar];

          // Set the properties, using the export info.
          if ProjectType = ptPackage then
          begin
            J := PEExports.FindByAddress(VarList[I]);
            if J <> -1 then
            begin
              NMInfo := GetNameManglingInfo(PEExports[J].Name);
              // This var may not appendbefore
              AppendBefore := atMayNot;
              // Set the name
              if (Name <> '') and (AnsiCompareText(NMInfo.ItemName, Name) = 0) then
                raise EDecompilerError.CreateFmt(SVarAlreadyHasAName, [Name, NMInfo.ItemName]);
              Name := NMInfo.ItemName;
              // Set the unit.
              J := Units.FindByName(NMInfo.UnitName);
              if J = -1 then
                raise EDecompilerError.CreateFmt(SUnitNotFound, [NMInfo.UnitName]);
              if (AUnit <> nil) and (AUnit <> Units[J]) then
                raise EDecompilerError.CreateFmt(SVarAlreadyHasAUnit, [TUnit(AUnit).Name, Units[J].Name]);
              AUnit := Units[J];
            end;
          end;
        end;
      end;
    finally
      varList.Free;
    end;
  end;
end;

procedure TVarInfos.LoadFixups;
var
  J, I, K: Integer;
  Decomp: TDecompItem;
begin
  with TPEFileClass(PEFileClass) do
  begin
    // Add the fixups to the vars.
    for I := 0 to Fixups.Count -1 do
    begin
      if (Fixups[I].Address >= Data) and
         (Fixups[I].FixupType <> 0) then
      begin
        if Fixups[I].FixupType <> 3 then
          raise EDecompilerError.Create('Unexpected fixup type');
        K := -1;
        for J := 0 to Count -1 do
          if (Fixups[I].Address >= Items[J].Address) and
             (Fixups[I].Address < Items[J].Address + Items[J].Size) then
          begin
            K := J;
            Break;
          end;
        if K <> -1 then
        begin
          Decomp := FindDecompItemByRef(PPChar(Fixups[I].Address)^);
          if Decomp <> nil then
            Items[K].AddDecomp(Decomp, Fixups[I].Address - Items[K].Address, dtNormal);
          with TPEFileClass(PEFileClass).Units[TPEFileClass(PEFileClass).Units.Count - 1] do
            if (PPChar(Fixups[I].Address)^ >= Address) and
               (PPChar(Fixups[I].Address)^ < Address + Size) then
              Items[K].AUnit := TPEFileClass(PEFileClass).Units[TPEFileClass(PEFileClass).Units.Count - 1];
        end;
      end;
    end;
  end;
end;

procedure TVarInfos.LoadInitVars;
var
  I: Integer;
begin
  with TPEFileClass(PEFileClass) do
    for I := 0 to Units.Count -1 do
    begin
      if Units[I].UnitType <> utProgram then
        with TVar.Create(Self) do
        begin
          Size := 4;
          Address := PPChar(Units[I].FInit.Address + $13)^;
          Name := Format('!InitCount%x', [I]);
          AUnit := Units[I];
        end
    end;
end;

function TVarInfos.GetItem(Index: Integer): TVar;
begin
  Result := TVar(inherited GetItem(Index));
end;

procedure TVarInfos.SetItem(Index: Integer; Value: TVar);
begin
  inherited SetItem(Index, Value);
end;

procedure TVarInfos.GenerateNames;
var
  I: Integer;
begin
  for I := 0 to Count -1 do
    if Items[I].Name = '' then
    begin
      if vtVar in Items[I].VarConst then
        Items[I].Name := Format('Var%p', [Pointer(Items[I].Address)])
      else
        Items[I].Name := Format('Const%p', [Pointer(Items[I].Address)]);
    end;
end;

function TVarInfos.IndexOfName(Name: string): Integer;
begin
  for Result := 0 to Count -1 do
    if Items[Result].Name = Name then
      exit;
  Result := -1;
end;

function TVarInfos.IndexOfAddress(AAddress: PChar): Integer;
begin
  for Result := 0 to Count -1 do
    with Items[Result] do
      if (Address <= AAddress) and (Address + Size > AAddress) then
        Exit;
  Result := -1;
end;

procedure TVarInfos.LoadVar(Address: PChar; Name: string; AUnit: TUnit);
var
  V: TVar;
  I: Integer;
begin
  V := TPEFileClass(PEFileClass).FindDecompItemByRef(Address) as TVar;
  if V = nil then
  begin
    V := TVar.Create(Self);
    V.Address := Address;
  end
  else
    if (V.Name <> '') and (CompareText(V.Name, Name) <> 0) then
      raise EDecompilerError.Create('Var already exists ' + V.Name + ' ' + Name);

  // Create the var and set the name and the address.
  for I := 0 to High(SysVarList) do
    if CompareText(SysVarList[I]^.Name, Name) = 0 then
    begin
      V.Name := Name;
      V.Size := SysVarList[I]^.Size;
      V.AUnit := AUnit;
      V.AppendBefore := atMayNot;
      V.AppendAfter := atMayNot;
      exit;
    end;
  raise EDecompilerError.Create('Hard coded var not found. ' + Name);
end;

procedure TVarInfos.DeterUnits;
var
  I, J: Integer;
  UIndex: Integer;
  ReqUnit: TUnit;
begin
  // Sort the vars on address.
  for I := 0 to Count -1 do
    for J := I +1 to Count -1 do
      if Items[J].Address < Items[I].Address then
        Items[J].Index := I;
  // The unit index can't have a lower index than a previous unit.
  UIndex := 2;
  for I := 0 to Count -1 do
  begin
    // Reset the minimal unit index if we are starting with the BSS section or
    // if this var may not append before.
    if (Items[I].Address = PEFileClass.BSS) or (Items[I].AppendBefore = atMayNot) then
      UIndex := 2;

    if Items[I].AUnit = nil then
    begin
      ReqUnit := nil;
      // If the item is requires in two different units it must be in the interface section.
      for J := 0 to Items[I].ReqByDecompCount -1 do
        if (Items[I].ReqByDecomps[J].AUnit <> nil) then
        begin
          if ReqUnit <> nil then
            // This item is required in two different units
            Items[I].IntfImpl := iiInterface
          else
            ReqUnit := Items[I].ReqByDecomps[J].AUnit as TUnit;
        end;
      if Items[I].IntfImpl = iiInterface then
      begin
        // If it is in the interface section it can't require a decomp after it.
        for J := 0 to Items[I].ReqDecompCount -1 do
          if (Items[I].ReqDecomps[J].AUnit <> nil) and
             (Items[I].ReqDecomps[J].AUnit.Index > UIndex) and
             (Items[I].ReqDecomps[J].PEFileClass = PEFileClass) then
            UIndex := Items[I].ReqDecomps[J].AUnit.Index;
      end
      else
      begin
        for J := 0 to Items[I].ReqDecompCount -1 do
          if (Items[I].ReqDecomps[J].AUnit <> nil) and
             (Items[I].ReqDecomps[J].AUnit.Index > UIndex) and
             (Items[I].ReqDecomps[J].IntfImpl = iiImplementation) and
             (Items[I].ReqDecomps[J].PEFileClass = PEFileClass) then
            UIndex := Items[I].ReqDecomps[J].AUnit.Index;
      end;
      Items[I].AUnit := TPEFileClass(PEFileClass).Units[UIndex];
    end
    else
      if Items[I].AUnit.Index > UIndex then
        UIndex := Items[I].AUnit.Index;

    // If this var may not append after, reset the unit index
    if Items[I].AppendAfter = atMayNot then
      UIndex := 2;
  end;
end;

end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜天堂影视香蕉久久| 欧美日高清视频| 国产色产综合产在线视频| 国产一区欧美一区| 久久久www成人免费无遮挡大片 | 一区二区三区毛片| 欧美久久久久久久久久| 日本欧美大码aⅴ在线播放| 欧美不卡视频一区| 高清日韩电视剧大全免费| 国产精品乱码一区二三区小蝌蚪| 一本大道久久a久久综合| 亚洲国产美国国产综合一区二区| 91精品麻豆日日躁夜夜躁| 国产一区二区三区不卡在线观看 | 欧美日韩在线三级| 激情图区综合网| 中文字幕一区二区视频| 欧美视频完全免费看| 国内精品视频一区二区三区八戒| 国产精品久久二区二区| 91精品免费在线| 成人性视频网站| 日韩黄色小视频| 中国色在线观看另类| 精品视频一区二区不卡| 国产毛片精品视频| 一区二区三区在线观看动漫| 日韩精品一区二区三区视频 | 盗摄精品av一区二区三区| 亚洲午夜精品在线| 久久久久国产一区二区三区四区| 91在线视频18| 国产麻豆视频一区二区| 午夜精品一区二区三区三上悠亚| 久久久另类综合| 91麻豆精品国产91久久久久| 97精品久久久久中文字幕| 蜜芽一区二区三区| 一区二区三区高清在线| 久久久噜噜噜久噜久久综合| 欧美精品自拍偷拍动漫精品| av一二三不卡影片| 国产乱码精品一品二品| 婷婷综合在线观看| 亚洲美女电影在线| 国产精品三级在线观看| 日韩欧美自拍偷拍| 欧美视频在线观看一区二区| 成人app软件下载大全免费| 视频一区视频二区中文字幕| 亚洲黄色免费网站| 亚洲欧洲国产日韩| 国产日本欧美一区二区| 精品国精品自拍自在线| 欧美高清你懂得| 欧美在线观看视频一区二区三区| 成人精品视频一区二区三区| 国产在线精品一区二区三区不卡| 日韩精品一卡二卡三卡四卡无卡| 一区二区三区高清在线| 亚洲精品亚洲人成人网在线播放| 欧美激情综合在线| 欧美国产精品专区| 亚洲精品一区二区三区影院| 日韩一级完整毛片| 日韩女优制服丝袜电影| 欧美一卡二卡三卡| 欧美一级在线观看| 日韩欧美中文字幕制服| 日韩午夜精品电影| 欧美一级国产精品| 91精品国产手机| 日韩一级免费一区| 日韩欧美美女一区二区三区| 日韩欧美专区在线| 精品粉嫩aⅴ一区二区三区四区| 欧美一区二区在线不卡| 日韩欧美一区二区视频| 日韩一区二区免费在线电影| 精品久久一区二区三区| 国产亚洲综合性久久久影院| 国产片一区二区三区| 国产片一区二区| 中文字幕亚洲一区二区va在线| 中文字幕亚洲一区二区va在线| 国产精品伦一区| 樱桃国产成人精品视频| 亚洲国产综合91精品麻豆| 亚洲444eee在线观看| 免费看欧美女人艹b| 国产中文字幕一区| 93久久精品日日躁夜夜躁欧美| 色婷婷国产精品| 91精品国产色综合久久不卡蜜臀| 欧美一区二区在线观看| 久久嫩草精品久久久精品一| 中文文精品字幕一区二区| 亚洲视频你懂的| 日韩国产欧美在线观看| 韩国女主播成人在线观看| 成人午夜免费视频| 欧美三级日韩三级| 26uuu国产在线精品一区二区| 久久精品男人天堂av| 亚洲精选免费视频| 视频在线观看91| 成人永久免费视频| 欧美日韩国产色站一区二区三区| 精品国产免费一区二区三区香蕉| 中文欧美字幕免费| 日本欧美一区二区| av在线综合网| 日韩一级在线观看| 亚洲精品成人在线| 国产综合色在线视频区| 色94色欧美sute亚洲线路二 | 欧美精品乱人伦久久久久久| 精品不卡在线视频| 一区二区三区日本| 国产精品1区2区| 欧美男男青年gay1069videost| 久久精品在线观看| 亚洲国产裸拍裸体视频在线观看乱了 | 日韩精品影音先锋| 亚洲色图制服诱惑| 激情综合色丁香一区二区| 色域天天综合网| 国产视频一区在线播放| 婷婷综合五月天| 日本高清无吗v一区| 久久婷婷色综合| 无吗不卡中文字幕| 白白色亚洲国产精品| 日韩欧美久久久| 亚洲主播在线观看| 99久久免费国产| 久久精品无码一区二区三区| 婷婷综合五月天| 91美女片黄在线| 国产精品欧美经典| 国产乱码精品一品二品| 91精品国产综合久久久蜜臀图片| 樱花影视一区二区| 99免费精品视频| 中日韩av电影| 国产东北露脸精品视频| 日韩欧美国产一区二区在线播放| 一区二区理论电影在线观看| 成人精品国产福利| 国产色产综合色产在线视频| 激情文学综合丁香| 精品国产免费视频| 精品一区在线看| 欧美va天堂va视频va在线| 日韩av电影免费观看高清完整版 | 欧美一级黄色录像| 日韩精品一级中文字幕精品视频免费观看| 91丨九色丨蝌蚪富婆spa| 国产精品久久一级| 成人18精品视频| 中文字幕一区二区5566日韩| 成人免费精品视频| 国产精品久久久久毛片软件| 国产成人精品综合在线观看| 久久久久久9999| 国产91精品精华液一区二区三区| 精品99999| 处破女av一区二区| 国产日韩欧美一区二区三区乱码 | 91在线视频官网| 亚洲麻豆国产自偷在线| 91免费国产在线| 17c精品麻豆一区二区免费| 91丨九色porny丨蝌蚪| 亚洲精品视频自拍| 在线观看日韩电影| 日韩av在线免费观看不卡| 精品美女在线观看| 国产激情偷乱视频一区二区三区| 国产精品入口麻豆原神| 91片在线免费观看| 亚洲风情在线资源站| 日韩欧美你懂的| 成人一区二区三区视频在线观看| 国产精品成人免费在线| 欧美少妇xxx| 久久国产精品99久久久久久老狼 | 久久av资源网| 久久久久99精品国产片| 99久久综合精品| 亚洲1区2区3区视频| 日韩三级免费观看| 国产aⅴ综合色| 中文字幕日韩欧美一区二区三区| 在线观看日韩电影| 久久精品国产精品亚洲综合| 国产精品大尺度| 欧美精品久久久久久久多人混战| 狠狠色综合色综合网络|