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

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

?? procs.pas

?? SrcDecompiler is about creating a Delphi program decompiler. The program is written for Delphi 4 or
?? PAS
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
unit Procs;

interface

uses
  PEFile, Classes, TypInfo,
  {$IFOPT D+} dcDebug, dialogs, {$ENDIF}
  dcDecomps, dcFields, MethodLists, dcParams, peExports;

type
  { TMiscs }

  TMiscs = class(TDecompCollection)
  private
    function GetItem(Index: Integer): TDecompItem;
    procedure SetItem(Index: Integer; Value: TDecompItem);
  public
    property Items[Index: Integer]: TDecompItem read GetItem write SetItem; default;
  end;

  { TGUIDConst }

  TGUIDConst = class(TDecompItem)
  public
    function IsRefAddress(AAddress: PChar): Boolean; override;
  end;
  
  { TTypeInfoInfo }

  TTypeInfoInfo = class(TDecompItem)
  private
    FTypeInfo: PTypeInfo;
    FName: string;
    function GetTypeDef: string;
    function GetTypeInfoVarName: string;
    function GetName: string;
  public
    function IsRefAddress(AAddress: PChar): Boolean; override;
    function HasTypeDef: Boolean;
    procedure LoadMethodRefs;

    property TypeInfo: PTypeInfo read FTypeInfo;
    property TypeDef: string read GetTypeDef;
    property TypeInfoVarName: string read GetTypeInfoVarName;
    property Name: string read GetName;
  end;

  { TTypeInfoInfos }

  TTypeInfoInfos = class(TDecompCollection)
  private
    function GetItem(Index: Integer): TTypeInfoInfo;
    procedure SetItem(Index: Integer; Value: TTypeInfoInfo);
  public
    procedure LoadTypeInfos;
    function FindTypeInfo(TypeInfo: PTypeInfo): TTypeInfoInfo;
    function IndexOfName(Name: string): Integer;
    property Items[Index: Integer]: TTypeInfoInfo read GetItem write SetItem; default;
  end;

  { TInterface }

  TInterface = class(TCollectionItem)
  private
    FGuid: TGUID;
    FMethodCount: Integer;
  public
    property GUID: TGUID read FGUID;
    property MethodCount: Integer read FMethodCount;
  end;

  { TInterfaces }

  TInterfaces = class(TCollection)
  private
    function GetItem(Index: Integer): TInterface;
    procedure SetItem(Index: Integer; Value: TInterface);
  public
    function Add(GUID: TGUID; MethodCount: Integer): TInterface;
    function FindInterface(GUID: TGUID): TInterface;
    property Items[Index: Integer]: TInterface read GetItem write SetItem; default;
  end;

const
  AppendBeforeIndex = 0;
  AppendAfterIndex = 1;

type
  TClassInfo = class;
  TClassInfos = class;
  TProcs = class;

  { TProc }

  TMethodBindingType = (mbtVirtual, mbtDynamic, mbtStatic);
  TProcType = (ptProcedure, ptClassProcedure, ptMethodProcedure, ptConstructor,
     ptDestructor, ptInitialization, ptFinalization, ptEntryPointProc);
  TProcTypes = set of TProcType;

  TProc = class;

  TImportInfo = record
    Imported: Boolean;
    DLLName: string;
    Entry: TPEImport;
    ImportedProc: TProc;
  end;

  TAppendType = (atMay, atMayNot, atMust);

  TProc = class(TDecompItem)
  private
    FOnSizeChange: TmlneMethodList;
    FOnInitSizeChange: TmlneMethodList;
    FInitSize: Integer;
    FBeforeInitSize: Integer;
    FFinaSize: Integer;
    FAfterFinaSize: Integer;
    FName: string;
    FImportInfo: TImportInfo;
    FPossProcTypes: TProcTypes;
    FMethodBindingType: TMethodBindingType;
    FPublished: Boolean;
    FMethodIndex: Integer;
    FClass: TClassInfo;
    FInstrSrc: TStrings;
    FOverrides: Boolean;
    FForwardDecl: Boolean;
    FParameters: TdcParameters;
    FProcEnh: TObject;
    FProcSize: Integer;
    FAppend: array[AppendBeforeIndex..AppendAfterIndex] of TAppendType;
    procedure SetPossProcTypes(Value: TProcTypes);
    function GetProcType: TProcType;
    procedure SetMethodBindingType(Value: TMethodBindingType);
    procedure SetClass(Value: TClassInfo);
    function GetDefSrc: string;
    function GetAncestorMethod: TProc;
    function GetIncName: string;
    procedure SetInitSize(Value: Integer);
    procedure ProcSizeChange(Sender: TmlneMethodList);
    procedure SetName(Value: string);
    function GetName: string;
    function GetPossProcTypes: TProcTypes;
    procedure SetOverrides(Value: Boolean);
    function GetAppend(Index: Integer): TAppendType;
    procedure SetAppend(Index: Integer; Value: TAppendType);
  protected
    procedure PossSetToIntf(DecompItem: TDecompItem); override;
    procedure SetSize(Value: Integer); override;
  public
    constructor Create(Procs: TProcs; Address: PChar); reintroduce; overload;
    destructor Destroy; override;
    procedure GenerateInstr;
    function IsRefAddress(AAddress: PChar): Boolean; override;
    procedure Append(Proc: TProc);
    procedure AddReqBy(Decomp: TDecompItem; AAddress: PChar); override;

    // InitSize is the size of the initilization code automaticly generated.
    property InitSize: Integer read FInitSize write SetInitSize;
    // Beofer init size is the size of the code before the auto generated code
    property BeforeInitSize: Integer read FBeforeInitSize write FBeforeInitSize;
    // FinaSize if the size of the finalization code automaticly generated.
    property FinaSize: Integer read FFinaSize write FFinaSize;
    // After init size is the size of the code after the auto generated code, to the end
    // of the proc indicated by procsize (not Size).
    property AfterFinaSize: Integer read FAfterFinaSize write FAfterFinaSize;

    property Name: string read GetName write SetName;
    // Inc name is the name including the object name (and Unit).
    property IncName: string read GetIncName;
    property ImportInfo: TImportInfo read FImportInfo write FImportInfo;
    property ProcType: TProcType read GetProcType;
    property PossProcTypes: TProcTypes read GetPossProcTypes write SetPossProcTypes;   // All posible proc types are set.
    property MethodBindingType: TMethodBindingType read FMethodBindingType write SetMethodBindingType;
    property APublished: Boolean read FPublished write FPublished;
    property MethodIndex: Integer read FMethodIndex write FMethodIndex; // VMT or Dynamic index
    property AClass: TClassInfo read FClass write SetClass;
    property Overrides: Boolean read FOverrides write SetOverrides;
    property InstrSrc: TStrings read FInstrSrc;
    property DefSrc: string read GetDefSrc;
    property ForwardDecl: Boolean read FForwardDecl write FForwardDecl;
    property AncestorMethod: TProc read GetAncestorMethod;
    property ProcSize: Integer read FProcSize write FProcSize;
    property Parameters: TdcParameters read FParameters;

    property AppendBefore: TAppendType index AppendBeforeIndex read GetAppend write SetAppend;
    property AppendAfter: TAppendType index AppendAfterIndex read GetAppend write SetAppend;
    property OnSizeChange: TmlneMethodList read FOnSizeChange;
    property OnInitSizeChange: TmlneMethodList read FOnInitSizeChange;
  end;

  { TProcEnh }

  TProcEnh = class(TObject)
  private
    FProc: TProc;
  public
    constructor CreateEnh(Proc: TProc); virtual;
    property Proc: TProc read FProc;
  end;

  { TDestructorProcEnh }

  TDestructorProcEnh = class(TProcEnh)
  private
    FHasBeforeDestruction: Boolean;
    FHasClassDestroy: Boolean;
  public
    constructor CreateEnh(Proc: TProc); override;
    destructor Destroy; override;
    procedure ProcSizeChange(Sender: TmlneMethodList);
    property HasBeforeDestruction: Boolean read FHasBeforeDestruction;
    property HasClassDestroy: Boolean read FHasClassDestroy;
  end;

  { TInitProcEnh }

  TInitProcEnh = class(TProcEnh)
  private
    FHasInitResStringImport: Boolean;
    FHasInitImport: Boolean;
  public
    constructor CreateEnh(Proc: TProc); override;
    destructor Destroy; override;
    procedure ProcInitSizeChange(Sender: TmlneMethodList);
    property HasInitResStringImport: Boolean read FHasInitResStringImport;
    property HasInitImport: Boolean read FHasInitImport;
  end;

  { TInitProc }

  TInitProc = class(TProc)
  public
    constructor CreateInit(Procs: TProcs; Address: PChar);
    constructor CreateFInit(Procs: TProcs; Address: PChar);
  end;

  { TProcs }

  TProcs = class(TDecompCollection)
  private
    FOnLoadPublishedMethods: TmlneMethodList;
    FPublishedMethodsLoaded: Boolean;
    function GetItem(Index: Integer): TProc;
    procedure SetItem(Index: Integer; Value: TProc);
  public
    constructor CreateDecomp(PEFileClass: TPEFile); override;
    destructor Destroy; override;
    procedure LoadPublishedMethods;
    procedure LoadExportedProcs;
    function AnalyzeProc(Proc: TProc): Boolean;
    procedure GenerateInstrs;
    function Add(Address: PChar): TProc;
    function FindProc(Address: PChar): TProc;
    function FindProcByName(const Name: string): Integer;
    function FindProcIndex(Address: PChar; var Index: Integer): Boolean;

    property Items[Index: Integer]: TProc read GetItem write SetItem; default;
    property OnLoadPublishedMethods: TmlneMethodList read FOnLoadPublishedMethods;
    property PublishedMethodsLoaded: Boolean read FPublishedMethodsLoaded;
  end;

  { TClassInfo }

  TClassInfo = class(TDecompItem)
  private
    FClass: TClass;
    FMethods: TList;
    FInterfaces: TList;
    FClassDef: TStrings;
    FFields: TdcFieldList;
    FAncestorClass: TClassInfo;
    FForwardDecl: Boolean;
    function GetMethod(Index: Integer): TProc;
    function GetMethodCount: Integer;
    function GetInterfaceCount: Integer;
    function GetInterface(Index: Integer): TInterface;
  public
    constructor Create(ClassInfos: TClassInfos; AClass: TClass); reintroduce; overload;
    destructor Destroy; override;
    procedure GenerateClassDef;
    procedure AnaClass;
    function IsRefAddress(AAddress: PChar): Boolean; override;
    function GetVirtualMethod(Index: Integer): TProc;
    function GetDynamicMethod(Index: Integer): TProc;
    function FindProc(const ProcName: string): TProc;

    property AClass: TClass read FClass write FClass;
    property MethodCount: Integer read GetMethodCount;
    property Methods[Index: Integer]: TProc read GetMethod;
    property Fields: TdcFieldList read FFields;
    property InterfaceCount: Integer read GetInterfaceCount;
    property Interfaces[Index: Integer]: TInterface read GetInterface;
    property ClassDef: TStrings read FClassDef write FClassDef;
    property AncestorClass: TClassInfo read FAncestorClass;
    property ForwardDecl: Boolean read FForwardDecl write FForwardDecl;
  end;

  { TClassInfos }

  TClassInfos = class(TDecompCollection)
  private
    FOnLoadClasses: TmlneMethodList;
    function GetItem(Index: Integer): TClassInfo;
    procedure SetItem(Index: Integer; Value: TClassInfo);
  public
    constructor CreateDecomp(PEFileClass: TPEFile); override;
    destructor Destroy; override;
    procedure LoadClassInfos;
    procedure GenerateClassDefs;
    function Add(AClass: TClass): TClassInfo;
    function FindClass(AClass: TClass): TClassInfo;
    function FindClassByName(const Name: string): TClassInfo;

    property Items[Index: Integer]: TClassInfo read GetItem write SetItem; default;
    property OnLoadClasses: TmlneMethodList read FOnLoadClasses;
  end;

  { TStringInfo }

  TStringInfos = class;

  TStringType = (stAnsiString, stWideString, stResourceString, stPAnsiChar,
       stPWideChar);

  TStringInfo = class(TDecompItem)
  private
    FValue: string;
    FStringAddress: PChar;
    FStringType: TStringType;
    FName: string;
    function GetStringTypeName: string;
  public
    constructor Create(StringInfos: TStringInfos; Address: PChar;
       StringType: TStringType; ASize: Integer = 0); reintroduce; overload;
    function IsRefAddress(AAddress: PChar): Boolean; override;

    property Value: string read FValue;
    property StringAddress: PChar read FStringAddress;
    property StringType: TStringType read FStringType;
    property StringTypeName: string read GetStringTypeName;
    property Name: string read FName write FName;
  end;

  { TStringInfos }

  TStringInfos = class(TDecompCollection)
  private
    function GetItem(Index: Integer): TStringInfo;
    procedure SetItem(Index: Integer; Value: TStringInfo);
  public
    procedure LoadStringInfos;
    function FindString(Address: PChar): TStringInfo;
    property Items[Index: Integer]: TStringInfo read GetItem write SetItem; default;
  end;

const
  ptMethods: TProcTypes = [ptClassProcedure .. ptDestructor];
  ptAll: TProcTypes = [Low(TProcType) .. High(TProcType)];
  ptAllStatic: TProcTypes = [ptProcedure .. ptDestructor];

// Returns true if the decomp item is a decomp item.
function IsTypeDecomp(Decomp: TDecompItem): Boolean;

// Functions for aligning Address and size to 4 bytes.
function Align4(Address: PChar): PChar; overload;
function Align4(Value: Integer): Integer; overload;

implementation

uses
  ObjFileConsts, SysUtils, ProcDecomp, DisAsm, VMTUtils, PEFileClass, Windows,
  Vars, dcUnits, dcInstr, TypeInfoUtils, dcNTInfoTypes, dcTypeIntf,
  NameMangling;

type
  PDWord = ^DWord;

{ TMiscs }

function TMiscs.GetItem(Index: Integer): TDecompItem;
begin
  Result := TDecompItem(inherited GetItem(Index));
end;

procedure TMiscs.SetItem(Index: Integer; Value: TDecompItem);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品日韩在线一区| 日韩一区欧美小说| 成人精品视频一区| 五月综合激情婷婷六月色窝| 国产欧美日韩不卡| 91精品国产综合久久久蜜臀粉嫩| 国产在线播放一区二区三区 | 亚洲欧美另类久久久精品2019| 91精品国产一区二区三区香蕉| www.日韩在线| 国模冰冰炮一区二区| 丝袜亚洲另类欧美| 亚洲女同一区二区| 国产精品欧美综合在线| 精品奇米国产一区二区三区| 在线视频你懂得一区二区三区| 风间由美一区二区三区在线观看| 美国十次了思思久久精品导航| 亚洲精品亚洲人成人网在线播放| 国产农村妇女毛片精品久久麻豆 | 日韩视频一区在线观看| 欧美日韩黄色一区二区| 色婷婷一区二区三区四区| 国产乱码一区二区三区| 久久国产精品99精品国产| 天堂午夜影视日韩欧美一区二区| 亚洲图片你懂的| 亚洲国产高清在线| 久久久久久久久久久久久夜| 欧美成人高清电影在线| 91精品视频网| 欧美一级欧美一级在线播放| 欧美日韩免费一区二区三区视频| 色综合咪咪久久| 97久久人人超碰| 一本到高清视频免费精品| 成人h版在线观看| 成人成人成人在线视频| 99久久伊人精品| 97久久超碰国产精品| 99久久久精品| 91麻豆精品一区二区三区| 91色视频在线| 欧美色电影在线| 欧美久久久一区| 欧美一区二区三区免费在线看 | 岛国av在线一区| 成人网在线播放| av动漫一区二区| 欧美亚洲国产一区二区三区va | 日韩视频不卡中文| 2020日本不卡一区二区视频| 久久免费电影网| 中文字幕中文字幕在线一区 | 久久精品一区二区三区四区| 精品久久免费看| 国产网红主播福利一区二区| 欧美激情艳妇裸体舞| 亚洲免费色视频| 无码av中文一区二区三区桃花岛| 开心九九激情九九欧美日韩精美视频电影| 久久精品国产亚洲高清剧情介绍| 国产自产v一区二区三区c| 成人在线综合网站| 在线观看成人免费视频| 日韩精品综合一本久道在线视频| 国产亚洲1区2区3区| 亚洲欧美日韩国产一区二区三区 | 久久久99精品免费观看不卡| 国产精品麻豆一区二区| 亚洲国产精品久久一线不卡| 久久99精品久久只有精品| 国产精品亚洲专一区二区三区| 99精品国产一区二区三区不卡| 在线观看av一区二区| 日韩精品最新网址| 亚洲丝袜另类动漫二区| 免费人成网站在线观看欧美高清| 成人国产一区二区三区精品| 欧美性一级生活| 久久久久88色偷偷免费| 亚洲综合av网| 国产传媒欧美日韩成人| 欧美色网站导航| 久久色视频免费观看| 亚洲一区二区成人在线观看| 黄色精品一二区| 欧美日韩免费不卡视频一区二区三区| 精品国产污污免费网站入口| 一区二区三区在线不卡| 国产一区在线观看麻豆| 欧美日韩亚洲国产综合| 中文字幕第一区综合| 免费成人在线观看| 91福利视频在线| 国产欧美日本一区二区三区| 全国精品久久少妇| 色悠悠久久综合| 中文字幕精品在线不卡| 毛片一区二区三区| 欧美中文字幕不卡| 亚洲欧洲日韩在线| 国产寡妇亲子伦一区二区| 日韩一级在线观看| 亚洲18影院在线观看| 91视频国产观看| 国产精品电影一区二区| 激情六月婷婷综合| 欧美区在线观看| 亚洲午夜视频在线| 色噜噜狠狠色综合中国| 中文字幕av一区 二区| 国产一区二区三区精品欧美日韩一区二区三区 | 国产精品美女久久久久高潮| 久久精品噜噜噜成人av农村| 欧美日韩成人综合在线一区二区| 最新热久久免费视频| 国产成人av一区| 久久婷婷久久一区二区三区| 美女一区二区视频| 日韩一区二区三区视频| 婷婷丁香激情综合| 欧美日韩精品一区视频| 亚洲国产日日夜夜| 欧美亚洲另类激情小说| 亚洲综合成人在线| 欧美日韩一区二区三区四区 | 欧美大尺度电影在线| 日韩av在线免费观看不卡| 欧美人xxxx| 青青青伊人色综合久久| 7777精品伊人久久久大香线蕉完整版 | 国产成人综合精品三级| 久久五月婷婷丁香社区| 久久国产夜色精品鲁鲁99| 日韩一级大片在线| 久久精品国产**网站演员| 日韩一区二区三区四区五区六区| 日韩va欧美va亚洲va久久| 欧美一区二区视频观看视频| 青青青爽久久午夜综合久久午夜| 日韩视频123| 国产主播一区二区| 国产欧美精品一区二区三区四区 | 色香蕉成人二区免费| 亚洲一区在线观看视频| 欧美日韩一级片在线观看| 午夜不卡av在线| 欧美电视剧在线看免费| 国产不卡视频在线播放| 中文字幕日韩av资源站| 91社区在线播放| 午夜伦欧美伦电影理论片| 欧美一区二区人人喊爽| 国产美女视频一区| 国产精品久久久久一区二区三区| 色视频欧美一区二区三区| 亚洲自拍与偷拍| 日韩一二三区不卡| 国产成人在线网站| 亚洲男人的天堂网| 欧美日本韩国一区二区三区视频| 蜜臂av日日欢夜夜爽一区| 国产欧美日韩卡一| 欧美性videosxxxxx| 另类综合日韩欧美亚洲| 国产农村妇女精品| 欧美性猛交xxxx乱大交退制版| 午夜精品福利一区二区三区av | 欧美韩国日本一区| 欧美中文字幕久久| 国产一区二区中文字幕| 亚洲欧美偷拍卡通变态| 日韩欧美久久久| 成av人片一区二区| 五月开心婷婷久久| 国产精品水嫩水嫩| 在线播放中文字幕一区| 丰满放荡岳乱妇91ww| 亚洲成人在线观看视频| 国产女同性恋一区二区| 欧美精选在线播放| 大陆成人av片| 免费日韩伦理电影| 亚洲摸摸操操av| 久久久精品影视| 欧美久久一二区| 一本久道久久综合中文字幕 | 一级精品视频在线观看宜春院| 日韩午夜在线观看视频| 91免费版pro下载短视频| 免费一区二区视频| 一区二区成人在线| 国产日韩欧美综合在线| 91精品午夜视频| 色女孩综合影院| 成人国产一区二区三区精品| 久久国产精品99精品国产 | 亚洲欧洲99久久| 久久亚洲二区三区|