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

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

?? procs.pas

?? SrcDecompiler is about creating a Delphi program decompiler. The program is written for Delphi 4 or
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
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);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美吻胸吃奶大尺度电影| 欧美日韩高清一区二区不卡| 亚洲国产精品综合小说图片区| 欧美r级电影在线观看| 一本色道久久综合精品竹菊| 国内精品久久久久影院薰衣草| 亚洲综合一区二区| ...中文天堂在线一区| 欧美精品一区二区三区蜜桃视频| 欧美性大战久久久| 99久久精品免费精品国产| 国内精品国产成人国产三级粉色 | 日韩免费高清视频| 91理论电影在线观看| 国产精品99久久久久久有的能看| 亚洲国产日韩一区二区| 最新国产精品久久精品| 国产色婷婷亚洲99精品小说| 日韩一级黄色大片| 欧美军同video69gay| 91无套直看片红桃| 成人美女在线观看| 国产成人一级电影| 国产精品18久久久| 国产一区在线观看视频| 精品一区二区三区在线视频| 日韩精品每日更新| 日韩国产高清在线| 日韩av中文在线观看| 五月婷婷欧美视频| 爽好多水快深点欧美视频| 亚洲午夜激情网站| 亚洲成人免费看| 午夜av区久久| 日韩精品成人一区二区在线| 五月天婷婷综合| 日韩精品福利网| 免费人成精品欧美精品| 蜜臀久久久久久久| 久色婷婷小香蕉久久| 国产综合成人久久大片91| 国产在线日韩欧美| 国产精品一区二区免费不卡| 丰满少妇在线播放bd日韩电影| 大胆亚洲人体视频| 色哟哟一区二区在线观看| 91麻豆精品在线观看| 日本高清不卡在线观看| 欧美三电影在线| 日韩一区二区不卡| 久久久久久久性| 国产欧美一区二区精品婷婷| 国产精品理论在线观看| 亚洲精品久久嫩草网站秘色| 亚洲丰满少妇videoshd| 全国精品久久少妇| 国产一区二区中文字幕| 成人免费av在线| 欧亚一区二区三区| 91精品国产综合久久国产大片 | 亚洲日本成人在线观看| 亚洲乱码国产乱码精品精98午夜| 亚洲一区二区三区国产| 久久成人18免费观看| 国产成人h网站| 欧美视频一区二区| 精品国产自在久精品国产| 中文字幕一区二区三区色视频| 夜夜精品视频一区二区| 久久99最新地址| 91在线一区二区| 7777精品伊人久久久大香线蕉超级流畅| 精品国产成人在线影院| 1024国产精品| 精品一区二区三区在线观看国产 | 亚洲r级在线视频| 精品在线播放免费| 91啪九色porn原创视频在线观看| 日韩一区二区三区免费看 | 欧美一区二区在线播放| 中文字幕巨乱亚洲| 日本欧美大码aⅴ在线播放| 国产aⅴ综合色| 91精品国产全国免费观看| 中文字幕av免费专区久久| 日韩影院免费视频| www.欧美亚洲| 欧美成人vr18sexvr| 亚洲乱码一区二区三区在线观看| 韩国一区二区在线观看| 欧美日韩第一区日日骚| 国产精品久久久久影院色老大| 午夜精品久久久久影视| 成人美女在线视频| 欧美mv日韩mv国产网站app| 亚洲色图视频网| 国产精品资源在线看| 欧美日韩国产中文| 亚洲人精品午夜| 国产高清亚洲一区| 日韩午夜在线影院| 午夜精品久久久久影视| 91色乱码一区二区三区| 国产欧美一区二区三区在线看蜜臀| 亚洲va中文字幕| 色综合久久综合| 国产精品欧美综合在线| 国产九色精品成人porny | 中文字幕乱码久久午夜不卡 | 亚洲欧洲日韩av| 国产原创一区二区三区| 欧美一级xxx| 亚洲国产日韩一区二区| 91官网在线免费观看| 国产精品高清亚洲| 成人美女视频在线看| 久久青草欧美一区二区三区| 蜜臀91精品一区二区三区| 欧美美女视频在线观看| 亚洲午夜一区二区| 色综合天天综合在线视频| 国产精品国产自产拍在线| 岛国精品在线观看| 中文字幕 久热精品 视频在线 | 亚洲另类色综合网站| 成人av网站大全| 国产精品成人免费| 北岛玲一区二区三区四区| 国产精品私人影院| 99久免费精品视频在线观看 | 亚洲人成亚洲人成在线观看图片| 成人理论电影网| 国产精品色哟哟网站| 成人网在线播放| 国产精品九色蝌蚪自拍| 色综合久久88色综合天天免费| 亚洲色图制服诱惑| 色琪琪一区二区三区亚洲区| 一区二区三区国产精品| 欧美私模裸体表演在线观看| 午夜影院在线观看欧美| 欧美电影在哪看比较好| 久久国产剧场电影| 久久亚洲影视婷婷| 成人网男人的天堂| 亚洲精品自拍动漫在线| 欧美亚洲一区二区在线观看| 丝袜亚洲精品中文字幕一区| 日韩欧美国产一区二区三区| 国产一区二区影院| 国产精品久久久久婷婷| 色婷婷综合激情| 午夜精品福利一区二区三区av | 国产亚洲欧美在线| 成人午夜av电影| 亚洲一本大道在线| 日韩一区二区三区视频在线| 国产成人av电影在线| 亚洲另类色综合网站| 日韩一区二区电影| eeuss鲁片一区二区三区| 一区二区三区四区激情 | 91精品国产福利| 国产一区999| 中文字幕亚洲成人| 欧美高清视频一二三区| 国产精品一级二级三级| 伊人一区二区三区| 欧美videos中文字幕| 99久久夜色精品国产网站| 香蕉成人啪国产精品视频综合网 | 久久久国产午夜精品| 色综合一个色综合亚洲| 免费欧美在线视频| 中文字幕一区二区三区精华液 | 香港成人在线视频| 国产丝袜美腿一区二区三区| 欧美午夜电影在线播放| 国内精品伊人久久久久影院对白| 亚洲日本电影在线| 精品国产自在久精品国产| 一本大道久久精品懂色aⅴ| 精品无码三级在线观看视频| 亚洲精品日产精品乱码不卡| 777亚洲妇女| 色偷偷一区二区三区| 韩国午夜理伦三级不卡影院| 亚洲男人天堂av网| 久久精品人人做人人综合| 欧美日本一区二区在线观看| 成人av电影在线网| 久久精品免费观看| 亚洲高清免费视频| 成人欧美一区二区三区视频网页| 日韩精品一区二| 欧美日韩亚洲国产综合| 不卡的av网站| 国产乱人伦偷精品视频免下载| 日韩中文字幕亚洲一区二区va在线| 国产精品国产三级国产aⅴ中文|