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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? procs.pas

?? SrcDecompiler is about creating a Delphi program decompiler. The program is written for Delphi 4 or
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
begin
  inherited SetItem(Index, Value);
end;

{ TGUIDConst }

function TGUIDConst.IsRefAddress(AAddress: PChar): Boolean;
begin
  Result := (AAddress = Address);
end;

{ TTypeInfoInfo }

function TTypeInfoInfo.IsRefAddress(AAddress: PChar): Boolean;
begin
  Result := (AAddress = Address) or (AAddress = Address + 4);
end;

function TTypeInfoInfo.GetTypeDef: string;
resourcestring
  STypeInfoWithoutDef = 'Error getting def from a TypeInfo without def at %p.';
begin
  if TypeInfo.Name[1] = '.' then
  begin
    if FName = '' then
      raise EDecompilerError.CreateFmt(STypeInfoWithoutDef, [Pointer(TypeInfo)]);
    Result := FName + ' = ' + TypeInfoUtils.GetTypeDef(TypeInfo) + ';';
  end
  else
    Result := TypeInfo^.Name + ' = ' + TypeInfoUtils.GetTypeDef(TypeInfo) + ';';
end;

function TTypeInfoInfo.GetTypeInfoVarName: string;
begin
  if TypeInfo.Name[1] = '.' then
  begin
    // Generate type info name.
    if FName = '' then
    begin
      // Make the name of "TypeInfo" + the old name - "."
      FName := 'TypeInfo';
      SetLength(FName, Length('TypeInfo')+ Ord(TypeInfo.Name[0]) -1);
      Move(TypeInfo.Name[2], FName[Length('TypeInfo') + 1], Ord(TypeInfo.Name[0]) -1);
    end;
    Result := FName + 'TypeInfo';
  end
  else
    Result := GetTypeInfoName(TypeInfo) + 'TypeInfo';
end;

function TTypeInfoInfo.GetName: string;
resourcestring
  SErrorTypeInfoWithoutAName = 'Can''t get name of TypeInfo at %p, because it doesn''t have one.';
begin
  if TypeInfo.Name[1] = '.' then
  begin
    if FName = '' then
      raise EDecompilerError.CreateFmt(SErrorTypeInfoWithoutAName, [Pointer(TypeInfo)]);
    Result := FName;
  end
  else
    Result := TypeInfo.Name;
end;

function TTypeInfoInfo.HasTypeDef: Boolean;
begin
  Result := ((not (TypeInfo^.Kind in [tkClass])) and (TypeInfo^.Name[1] <> '.')) or
            (FName <> '');
end;

procedure TTypeInfoInfo.LoadMethodRefs;
var
  I, J: Integer;
  ParamRecord: PParamRecord;
  TypeData: PTypeData;
  TypeName: PShortString;
  DC: TDecompItem;
  XUnit1, XUnit2: TUnit;
begin
  if TypeInfo.Kind = tkMethod then
  begin
    // Add all the type infos and classes requrired by the method type.
    TypeData := GetTypeData(TypeInfo);
    ParamRecord := @TypeData.ParamList;
    for I := 0 to TypeData.ParamCount -1 do
    begin
     TypeName := Pointer(Integer(@ParamRecord^.ParamName) + Length(ParamRecord^.ParamName) +1);
     DC := TPEFileClass(PEFileClass).Classes.FindClassByName(TypeName^);
     if DC = nil then
     begin
       J := TPEFileClass(PEFileClass).TypeInfos.IndexOfName(TypeName^);
       if J <> -1 then
         DC := TPEFileClass(PEFileClass).TypeInfos[J]
       else
       begin
         J := TPEFileClass(PEFileClass).NoTInfoTypes.IndexOfName(TypeName^);
         if J <> -1 then
         begin
           // Make the unit Index as Low as possible.
           DC := TPEFileClass(PEFileClass).NoTInfoTypes[J];
           XUnit1 := TPEFileClass(PEFileClass).Units.FindInUnitUsingFInit(DC.Address);
           XUnit2 := TPEFileClass(PEFileClass).Units.FindInUnitUsingFInit(Address);
           if XUnit2.Index < XUnit1.Index then
             DC.Address := Address
           else
             if (XUnit1.Index = XUnit1.Index) and (DC.Address > Address) then
               DC.Address := Address;
         end
         else
           if TypeName^ <> 'Pointer' then
           begin
             // If there isn't a type with th anme declare a new one.
             DC := TNoTInfoType.Create(TPEFileClass(PEFileClass).NoTInfoTypes);
             DC.Address := Address;
             TNoTInfoType(DC).Name := TypeName^;
             TNoTInfoType(DC).Defenition := TypeName^ + ' = Pointer;';
           end;
       end;
     end;
     if DC <> nil then
       Self.AddReq(DC, nil);
     ParamRecord := PParamRecord(Integer(ParamRecord) + SizeOf(TParamFlags) +
        (Length(ParamRecord^.Paramname) +1) + (Length(TypeName^) + 1));
    end;
    if TypeData.MethodKind = mkFunction then
    begin
      TypeName := PShortString(ParamRecord);
      DC := TPEFileClass(PEFileClass).Classes.FindClassByName(TypeName^);
      if DC = nil then
      begin
        J := TPEFileClass(PEFileClass).TypeInfos.IndexOfName(TypeName^);
        if J <> -1 then
          DC := TPEFileClass(PEFileClass).TypeInfos[J]
        else
        begin
          J := TPEFileClass(PEFileClass).NoTInfoTypes.IndexOfName(TypeName^);
          if J <> -1 then
          begin
            // If there is a type without type info with the name, make the address as low as possible.
            DC := TPEFileClass(PEFileClass).NoTInfoTypes[J];
            XUnit1 := TPEFileClass(PEFileClass).Units.FindInUnitUsingFInit(DC.Address);
            XUnit2 := TPEFileClass(PEFileClass).Units.FindInUnitUsingFInit(Address);
            if XUnit2.Index < XUnit1.Index then
              DC.Address := Address
            else
              if (XUnit1.Index = XUnit1.Index) and (DC.Address > Address) then
                DC.Address := Address;
          end
          else
          begin
            // If there isn't a type with th anme declare a new one.
            DC := TNoTInfoType.Create(TPEFileClass(PEFileClass).NoTInfoTypes);
            DC.Address := Address;
            TNoTInfoType(DC).Name := TypeName^;
            TNoTInfoType(DC).Defenition := TypeName^ + ' = Pointer;';
          end;
        end;
      end;
      if DC <> nil then
        Self.AddReq(DC, nil);
    end;
  end;
end;

{ TTypeInfoInfos }

procedure TTypeInfoInfos.LoadTypeInfos;
var
  I, J: Integer;
label
  NextFixup;
begin
  with TPEFileClass(PEFileClass) do
    for I := 0 to Fixups.Count -1 do
    begin
      if (Fixups[I].FixupType = 3) and
         (Fixups[I].Address >= Code) and
         (Fixups[I].Address < Code + CodeSize) and
         (PPChar(Fixups[I].Address)^ = Fixups[I].Address + 4) and
         (Fixups[I].Address[4] in [#0..#17]) and
         (Integer(Fixups[I].Address) mod 4 = 0) and
         (IsIdentifier(Fixups[I].Address + 5)) then
        begin
          // Check that the fixups isn't inside an class declaration.
          for J := 0 to Classes.Count -1 do
            if (Fixups[I].Address >= Classes[J].Address) and
               (Fixups[I].Address < Classes[J].Address + Classes[J].Size) then
              goto NextFixup;
          // Check that there is a fixup at the location.
          for J := 0 to Fixups.Count -1 do
            if Fixups[I].Address + 4 = Fixups[J].Address then
              goto NextFixup;

          // TypeInfo found.
          with TTypeInfoInfo.Create(Self) do
          begin
            FTypeInfo := PTypeInfo(Fixups[I].Address +4);
            Address := Fixups[I].Address;
            RefAddress := Fixups[I].Address;
            // include Pointer in size and align to 4 byte.
            Size := Align4(GetTypeInfoSize(FTypeInfo)) +4;
          end;
        end;
      NextFixup:
    end;
end;

function TTypeInfoInfos.FindTypeInfo(TypeInfo: PTypeInfo): TTypeInfoInfo;
var
  I: Integer;
begin
  for I := 0 to Count - 1 do
  begin
    Result := TTypeInfoInfo(inherited GetItem(I));
    if Result.TypeInfo = TypeInfo then Exit;
  end;
  Result := nil;
end;

function TTypeInfoInfos.GetItem(Index: Integer): TTypeInfoInfo;
begin
  Result := TTypeInfoInfo(inherited GetItem(Index));
end;

procedure TTypeInfoInfos.SetItem(Index: Integer; Value: TTypeInfoInfo);
begin
  inherited SetItem(Index, Value);
end;

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

{ TInterface }

{ TInterfaces }

function TInterfaces.Add(GUID: TGUID; MethodCount: Integer): TInterface;
begin
  Result := TInterface.Create(Self);
  Result.FGUID := GUID;
  Result.FMethodCount := MethodCount;
end;

function TInterfaces.FindInterface(GUID: TGUID): TInterface;
var
  I: Integer;
begin
  for I := 0 to Count - 1 do
  begin
    Result := TInterface(inherited GetItem(I));
    if CompareMem(@Result.GUID, @GUID, SizeOf(TGUID)) then Exit;
  end;
  Result := nil;
end;

function TInterfaces.GetItem(Index: Integer): TInterface;
begin
  Result := TInterface(inherited GetItem(Index));
end;

procedure TInterfaces.SetItem(Index: Integer; Value: TInterface);
begin
  inherited SetItem(Index, Value);
end;

{ TProc }

constructor TProc.Create(Procs: TProcs; Address: PChar);
var
  I: Integer;
begin
  Procs.FindProcIndex(Address, I);
  inherited Create(Procs);
  Self.Address := Address;
  RefAddress := Address;
  FPossProcTypes := ptAll;
  FMethodBindingType := mbtStatic;
  FInstrSrc := TStringList.Create;
  FParameters := TdcParameters.Create;
  FOnSizeChange := TmlneMethodList.Create;
  FOnInitSizeChange := TmlneMethodList.Create;
  OnSizeChange.Add(ProcSizeChange);
  Index := I;
end;

destructor TProc.Destroy;
begin
  FProcEnh.Free;
  FOnInitSizeChange.Free;
  FOnSizeChange.Free;
  FInstrSrc.Free;
  if not Overrides then
    FParameters.Free;
  inherited Destroy;
end;

procedure TProc.GenerateInstr;
begin
  dcInstr.GenerateInstr(Self);
end;

function TProc.IsRefAddress(AAddress: PChar): Boolean;
begin
  Result := (AAddress = Address);
end;

procedure TProc.Append(Proc: TProc);
var
  I, J: Integer;
  AAddress: PChar;
resourcestring
  SMayNotAppendError = 'trying appending a proc which may not append, %p, %p';
begin
  Comments.Add(Format('Proc at %p append', [Pointer(Proc.Address)]));
  Comments.Add('Comments of the append proc');
  Comments.AddStrings(Proc.Comments);
  Comments.Add('Append Comments ended');
  if (AppendAfter = atMayNot) or (Proc.AppendBefore = atMayNot) then
    raise EDecompilerError.CreateFmt(SMayNotAppendError, [Pointer(Proc.Address), Pointer(Address)]);
  FAppend[1] := Proc.AppendAfter;
  // Add the req decomps to this one.
  for I := 0 to Proc.ReqDecompCount -1 do
    if Proc.ReqDecomps[I] <> Self then
      AddReq(Proc.ReqDecomps[I], PChar(Proc.ReqDecompsAddress[I]));
  // Add the Self to the items which requires the item to Append.
  for I := 0 to Proc.ReqByDecompCount -1 do
  begin
    if Proc.ReqByDecomps[I] <> Self then
    begin
      // Find the item which requires this item.
      AAddress := nil;
      for J := 0 to Proc.ReqByDecomps[I].ReqDecompCount -1 do
        if Proc.ReqByDecomps[I].ReqDecomps[J] = Proc then
        begin
          AAddress := PChar(Proc.ReqByDecomps[I].ReqDecompsAddress[J]);
          Break;
        end;
      Proc.ReqByDecomps[I].AddReq(Self, AAddress);
      // If item which requires the Append item is a Proc, it must append.
      if Proc.ReqByDecomps[I] is TProc then
      begin
        if Proc.ReqByDecomps[I].Address < Address then
        begin
          if TProc(Proc.ReqByDecomps[I]).AppendAfter = atMay then
            TProc(Proc.ReqByDecomps[I]).AppendAfter := atMust
        end
        else
          if TProc(Proc.ReqByDecomps[I]).AppendBefore = atMay then
            TProc(Proc.ReqByDecomps[I]).AppendBefore := atMust;
      end;
    end;
  end;
  Size := Proc.Address + Proc.Size - Address;
  ProcSize := Size;
  Proc.Free;
  // Recheck the req address,
  for I := 0 to ReqDecompCount -1 do
    if (ReqDecomps[I] is TProc) and (PChar(ReqDecompsAddress[I]) <> ReqDecomps[I].Address) and
       (ReqDecompsAddress[I] <> nil) then
    begin
      if ReqDecomps[I].Address > Address then
        AppendAfter := atMust
      else
        AppendBefore := atMust;
    end;
end;

procedure TProc.AddReqBy(Decomp: TDecompItem; AAddress: PChar);
begin
  inherited AddReqBy(Decomp, AAddress);
  // if this is method the class is also req.
  if AClass <> nil then
    Decomp.AddReq(AClass, nil);
end;

procedure TProc.SetPossProcTypes(Value: TProcTypes);
begin
  if Value = FPossProcTypes then
    Exit;
  if Value = [] then
    raise EDecompilerError.Create('Empty PossProcType');
  if not (Value <= FPossProcTypes) then

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级精品在线| 中文字幕在线不卡一区二区三区| 久久这里只有精品6| 亚洲欧美日韩一区二区| 精品亚洲porn| 在线一区二区三区做爰视频网站| 久久久久亚洲综合| 婷婷综合五月天| 91亚洲精品久久久蜜桃网站| 亚洲精品一区二区三区在线观看| 亚洲图片欧美色图| 成人深夜视频在线观看| 欧美大片一区二区| 丝袜美腿亚洲一区| 欧美性受xxxx| 亚洲精品菠萝久久久久久久| 成人av在线一区二区三区| 日韩精品一区二区三区中文精品| 亚洲午夜一区二区| 一本到高清视频免费精品| 国产精品进线69影院| 国产激情一区二区三区四区| 欧美一区二区私人影院日本| 亚洲第一主播视频| 欧美在线播放高清精品| 亚洲精品videosex极品| 一本大道av伊人久久综合| 自拍偷拍欧美精品| 色婷婷亚洲综合| 亚洲天堂成人在线观看| 99精品欧美一区二区蜜桃免费 | 精品一区二区三区免费播放| 欧美日韩一级二级三级| 午夜伦理一区二区| 69av一区二区三区| 蜜臀91精品一区二区三区| 在线成人午夜影院| 美女免费视频一区| 久久亚区不卡日本| 国产91在线看| 日韩一区在线看| 在线免费观看视频一区| 亚洲一区影音先锋| 欧美一卡2卡三卡4卡5免费| 蜜桃精品视频在线观看| 久久伊99综合婷婷久久伊| 国产精品亚洲一区二区三区在线 | 亚洲一区二区精品视频| 正在播放亚洲一区| 蜜桃精品视频在线| 国产日韩欧美一区二区三区乱码| 国产成人精品三级麻豆| 亚洲私人黄色宅男| 欧美老肥妇做.爰bbww视频| 老色鬼精品视频在线观看播放| 精品国产91乱码一区二区三区 | 色av综合在线| 日本午夜精品视频在线观看| 精品久久一二三区| av一二三不卡影片| 午夜精品福利一区二区三区av| 4438x亚洲最大成人网| 国产麻豆视频精品| 亚洲精品视频免费看| 欧美一区二区三区视频免费| 激情图片小说一区| 亚洲国产一区二区三区| 久久久蜜桃精品| 精品视频在线视频| 成人综合激情网| 亚洲不卡在线观看| 久久久久久影视| 欧美精品日日鲁夜夜添| 国产成人高清视频| 亚洲成人免费av| 国产精品网站在线播放| 欧美一区中文字幕| 不卡电影一区二区三区| 日本系列欧美系列| 亚洲乱码国产乱码精品精小说| 欧美成人激情免费网| 日本高清不卡视频| 国产不卡视频在线播放| 天使萌一区二区三区免费观看| 国产精品久久久久久户外露出 | 欧美一区国产二区| 色婷婷精品久久二区二区蜜臂av| 激情另类小说区图片区视频区| 一区二区三区四区在线播放| 日本一区二区成人在线| 欧美电视剧免费全集观看| 欧美日韩亚洲综合一区| 一本久道中文字幕精品亚洲嫩| 国产91精品精华液一区二区三区 | 色av成人天堂桃色av| 风流少妇一区二区| 久久99精品国产麻豆婷婷| 亚洲成人第一页| 亚洲综合免费观看高清完整版| 久久久亚洲国产美女国产盗摄| 7777精品伊人久久久大香线蕉经典版下载 | 日韩一区二区影院| 欧美伦理影视网| 在线观看成人小视频| 99免费精品在线观看| 粉嫩一区二区三区性色av| 韩国欧美国产一区| 寂寞少妇一区二区三区| 日韩精品乱码免费| 日韩精品电影在线观看| 午夜日韩在线电影| 亚洲成av人片在线观看| 亚洲午夜精品17c| 亚洲一区成人在线| 亚洲高清中文字幕| 日韩电影在线免费| 日本麻豆一区二区三区视频| 日韩av一级片| 久久av资源网| 国产精品一区在线观看乱码| 国产成人鲁色资源国产91色综| 成人午夜视频网站| 91麻豆免费看| 欧美三级日韩三级| 欧美变态tickle挠乳网站| 久久综合丝袜日本网| 国产欧美日韩亚州综合| 中文字幕一区二区日韩精品绯色| 国产精品家庭影院| 亚洲国产va精品久久久不卡综合| 丝瓜av网站精品一区二区| 久久精品国产精品青草| 国产麻豆精品theporn| 国产宾馆实践打屁股91| 91亚洲国产成人精品一区二三| 在线观看www91| 日韩欧美在线网站| 国产人伦精品一区二区| 亚洲日本欧美天堂| 天天亚洲美女在线视频| 国产一区二区三区四区五区入口| 国产a区久久久| 91高清视频免费看| 日韩欧美黄色影院| 中文字幕在线视频一区| 丝袜脚交一区二区| 盗摄精品av一区二区三区| 欧美色图在线观看| 久久久久国产精品麻豆ai换脸| 亚洲欧美日韩电影| 久久99久久99精品免视看婷婷| 成人免费高清在线| 欧美丰满少妇xxxxx高潮对白| 久久久久久亚洲综合| 一区二区高清视频在线观看| 麻豆成人免费电影| 色婷婷综合久久久| 国产丝袜在线精品| 亚洲h精品动漫在线观看| 国产精品一区免费在线观看| 欧美午夜电影一区| 国产精品沙发午睡系列990531| 午夜视频在线观看一区二区| 成人免费精品视频| 欧美va在线播放| 亚洲在线观看免费视频| 国产sm精品调教视频网站| 欧美一级生活片| 一区二区成人在线| 成人丝袜高跟foot| 精品91自产拍在线观看一区| 午夜激情综合网| 色8久久精品久久久久久蜜| 久久久久久久久99精品| 日本少妇一区二区| 欧美午夜电影网| 亚洲日本在线a| jlzzjlzz亚洲日本少妇| 久久婷婷一区二区三区| 青青草国产精品亚洲专区无| 在线看一区二区| 亚洲欧美一区二区在线观看| 国产成人自拍网| 精品欧美一区二区久久| 秋霞av亚洲一区二区三| 欧美日韩国产一区| 亚洲最色的网站| 一本大道久久a久久综合| 亚洲区小说区图片区qvod| 成人黄色国产精品网站大全在线免费观看 | 欧美日韩小视频| 亚洲欧美日韩综合aⅴ视频| 99久久综合狠狠综合久久| 欧美国产禁国产网站cc| 国产精品一区不卡| 久久久久久久综合色一本| 精品一区二区三区欧美| 久久日韩精品一区二区五区| 精品一区二区成人精品| www国产亚洲精品久久麻豆|