⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainunit.pas

📁 dede 的源代码 3.10b
💻 PAS
📖 第 1 页 / 共 5 页
字号:
unit MainUnit;
//////////////////////////
// Last Change: 09.II.2001
//////////////////////////

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Mask, ToolEdit, StdCtrls, ComCtrls, Animate, GIFCtrl, ExtCtrls, Menus,
  Buttons, RXCtrls, jpeg, RxGrdCpt, ImgList, DeDeClasses, DeDeBSS, DeDe_SDK, DisAsm,
  Placemnt{, ShareMem};

type TFileType = (ftEXE, ftBPL, ftDCU);


Type TPackageInfoTable = class (TObject)
       public
          dwUnitCount : DWORD;
          dwPhysOffs  : DWORD;
          UnitsStartPtrs   : Array of DWORD;
          UnitsInitPtrs   : Array of DWORD;
          UnitsFInitPtrs  : Array of DWORD;
          UnitsNames      : TStringList;
          ClassesList : TList;

          constructor Create;
          destructor Destroy; override;
          procedure SetUnitCount(z : DWORD);
          procedure IdentUnitNames(Sender : TObject);
        end;

Type TClassDumper = Class
       protected
        IsInDataSection : Boolean;
        Procedure CalculatePositions;
        Procedure DumpFields;
        Function GetDFMOffset(AsClassName : String) : DWORD;
        Function InCodeSection(RVA : DWORD) : Boolean;
        Function InDataSection(RVA : DWORD) : Boolean;
        Function IsInData(RVA : DWORD) : Boolean;
       public
        //PEHeader : TPEHeader;
        DELTA_PHYS : DWORD;
        FdwBSSOffset, FdwHeapPtr, FdwDATAPrt : TList;
        FdwSelfPrt, FdwSelfPrtPos : DWORD;
        FsClassName : String;
        FsUnitName : String;
        FbClassFlag : Byte;
        FdwVMTPtr, FdwVMTPos : DWORD;
        FdwVMTPtr2 : DWORD;
        FdwInterfaceTlbPtr : DWORD;
        FdwAutomationTlbPtr : DWORD;
        FdwInitializationTlbPtr : DWORD;
        FdwInformationTlbPtr : DWORD;
        FdwFieldDefTlbPtr : DWORD;
        FdwMethodDefTlbPtr : DWORD;
        FdwDynMethodsTlbPtr : DWORD;
        FdwInterfaceTlbPos : DWORD;
        FdwAutomationTlbPos : DWORD;
        FdwInitializationTlbPos : DWORD;
        FdwInformationTlbPos : DWORD;
        FdwFieldDefTlbPos : DWORD;
        FdwMethodDefTlbPos : DWORD;
        FdwDynMethodsTlbPos : DWORD;
        FdwClassNamePos : DWORD;
        FdwClassNamePtr : DWORD;
        FdwClassSize : DWORD;
        FdwAncestorPtrPtr : DWORD;
        FdwSafecallExceptionMethodPtr : DWORD;
        FdwDefaultHandlerMethodPtr : DWORD;
        FdwNewInstanceMethodPtr : DWORD;
        FdwFreeInstanceMethodPtr : DWORD;
        FdwDestroyDestructorPtr : DWORD;
        FieldData : TFieldData;
        MethodData : TMethodData;
        FdwDFMOffset : DWORD;
        FdwFirstProcRVA : DWORD;
        Constructor Create;
        Destructor Destroy; override;
        Procedure Dump(dwSelfPtrPos : DWORD);
        Procedure DumpObject(dwSelfPtrPos : DWORD);
        Procedure DumpObjectEx(dwSelfPtrPos: DWORD; btType : Byte);
        Procedure DumpMethods(dwEndRVA : DWORD; bDumpAdditional : Boolean  = False);
        Function GetMethodRVA(sMethName : String) : DWORD;
        Function IsBSSDATAClass(Index : Integer) : Boolean;
     End;

Type TClassesDumper = Class
      protected
        DFMTXTDATA_Names : Array of String;
        DFMTXTDATA : TList;
        FiZeroCount : Integer;
        Procedure AddClass(dwSelfPtrPos : DWORD);
        Procedure AddClass_D2(dwSelfPtrPos : DWORD);
        Procedure AddObject(dwSelfPtrPos : DWORD);
        Procedure AddObjectEx(dwSelfPtrPos: DWORD; btType : Byte);
        function ClassExists(sClassName : string) : Boolean;
        function GetClassByName(sClassName : String) : TClassDumper;
        procedure EnumDFMOffsets;
        procedure LoadDFMTXTDATA;
      public
        Classes : TList;
        DFMOffsets : TStringList;
        BSS : TBSS;
        PackageInfoTable : TPackageInfoTable;
        Constructor Create;
        Destructor Destroy; override;
        Procedure ClearClasses;
        Procedure ClearDFMTXTDATA;
        Procedure Dump;
        Procedure FinilizeDump;
        Function GetDFMTXTDATA(sClassName : String) : TStringList;
        Function GetClass(sClassName : String) : TClassDumper;
        Function GetClassWMethods(sClassName : String) : TClassDumper;
        Function GetClassWFields(sClassName: String): TClassDumper;
        Procedure GetBufferForDPJSave(var buff : Array of byte; var size : Integer);
     End;

type
  TDeDeMainForm = class(TForm)
    Pnl: TPanel;
    StsBar: TStatusBar;
    DFMListPopUp: TPopupMenu;
    puViewastext: TMenuItem;
    puSep: TMenuItem;
    puSaveasDFM: TMenuItem;
    puSaveasRC: TMenuItem;
    tppnl: TPanel;
    FileEdit: TFilenameEdit;
    DumpStatusLbl: TLabel;
    ProjectNameLbl: TLabel;
    DumpAnimation: TRxGIFAnimator;
    rvapu: TPopupMenu;
    puCopyRVAtoclipboard: TMenuItem;
    puSaveasTXT: TMenuItem;
    svrvspu: TPopupMenu;
    puSaveeventsRVAsastext: TMenuItem;
    mpc: TPageControl;
    uts: TTabSheet;
    fmts: TTabSheet;
    DFMList: TListView;
    DFMMemo: TMemo;
    dts: TTabSheet;
    DCULV: TListView;
    dcupnl: TPanel;
    clspnl: TPanel;
    ClassLbl: TLabel;
    fts: TTabSheet;
    N1: TMenuItem;
    Showmoredata1: TMenuItem;
    Panel1: TPanel;
    CustomPB: TProgressBar;
    N4: TMenuItem;
    Disassemble1: TMenuItem;
    DeDeOpenDlg: TOpenDialog;
    SaveDlg: TSaveDialog;
    PageControl2: TPageControl;
    TabSheet4: TTabSheet;
    TabSheet5: TTabSheet;
    EventLV: TListView;
    ControlsLV: TListView;
    FE: TEdit;
    RecentFileEdit: TComboBox;
    RxGradientCaption1: TRxGradientCaption;
    ImageList1: TImageList;
    MMenu: TMainMenu;
    File1: TMenuItem;
    Process1: TMenuItem;
    N3: TMenuItem;
    Exit1: TMenuItem;
    Tools1: TMenuItem;
    RVAconverter1: TMenuItem;
    ASM1: TMenuItem;
    View1: TMenuItem;
    Preferences1: TMenuItem;
    About1: TMenuItem;
    OpenDlg: TOpenDialog;
    Dumpers1: TMenuItem;
    BPLDumper2: TMenuItem;
    DCUDumper2: TMenuItem;
    MorePEInfo1: TMenuItem;
    N5: TMenuItem;
    Symbols1: TMenuItem;
    LoadSymbolFile1: TMenuItem;
    N8: TMenuItem;
    ClearTimer: TTimer;
    OpenSymDlg: TOpenDialog;
    cbDFM: TCheckBox;
    cbPAS: TCheckBox;
    cbDPR: TCheckBox;
    cbTXT: TCheckBox;
    crtBtn: TButton;
    DirEdit: TDirectoryEdit;
    Label1: TLabel;
    SavePB: TProgressBar;
    ClassesLV: TListView;
    PrcsBtn: TButton;
    ImageList2: TImageList;
    Label2: TLabel;
    DAP: TMenuItem;
    TabSheet1: TTabSheet;
    Label3: TLabel;
    EPB: TProgressBar;
    Button1: TButton;
    Label4: TLabel;
    ExportFileName: TFilenameEdit;
    IDAMAP: TRadioButton;
    RVACB: TCheckBox;
    ControlCB: TCheckBox;
    REF: TRadioButton;
    MakePEHeader1: TMenuItem;
    SpeedButton2: TSpeedButton;
    SpeedButton1: TSpeedButton;
    AllCallsCB: TCheckBox;
    AllStrCB: TCheckBox;
    ExportDetailsLbl: TLabel;
    CustomCB: TCheckBox;
    N6: TMenuItem;
    N7: TMenuItem;
    DSFSpy1: TMenuItem;
    Panel3: TPanel;
    Panel2: TPanel;
    VersionLbl: TLabel;
    Panel4: TPanel;
    Panel5: TPanel;
    PIUL: TListBox;
    Label5: TLabel;
    N9: TMenuItem;
    Analizethisclass1: TMenuItem;
    DeleteTimer: TTimer;
    De1: TMenuItem;
    N2: TMenuItem;
    SaveProjectFile1: TMenuItem;
    LoadProjectFile1: TMenuItem;
    SaveProjectFileAs1: TMenuItem;
    TabSheet2: TTabSheet;
    UnitsDataClassesLV: TListView;
    UnitDataLV: TListView;
    publh: TPopupMenu;
    Saveunitdataasbinaryfile1: TMenuItem;
    N10: TMenuItem;
    Fullparse1: TMenuItem;
    DoItTimer: TTimer;
    DeDeProjectSaveDialog: TSaveDialog;
    DeDeProjectOpenDialog: TOpenDialog;
    OpenDOIDlg: TOpenDialog;
    LanguagesMI: TMenuItem;
    ENGLISH1: TMenuItem;
    currUnitLbll: TLabel;
    FP: TFormPlacement;
    Procedure DCULVClick(Sender: TObject);
    Procedure PreBtnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure DCULVDblClick(Sender: TObject);
    procedure puCopyRVAtoclipboardClick(Sender: TObject);
    procedure puSaveasDFMClick(Sender: TObject);
    procedure puSaveasRCClick(Sender: TObject);
    procedure puOpenwithnotepadClick(Sender: TObject);
    procedure puViewastextClick(Sender: TObject);
    procedure puSaveasTXTClick(Sender: TObject);
    procedure DFMListChange(Sender: TObject; Item: TListItem;
      Change: TItemChange);
    procedure Showmoredata1Click(Sender: TObject);
    procedure crtBtnClick(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure About1Click(Sender: TObject);
    procedure RVAconverter1Click(Sender: TObject);
    procedure puSaveeventsRVAsastextClick(Sender: TObject);
    procedure ASM1Click(Sender: TObject);
    procedure MorePEinfo1Click(Sender: TObject);
    procedure Disassemble1Click(Sender: TObject);
    procedure DisassembleProc1Click(Sender: TObject);
    procedure Preferences1Click(Sender: TObject);
    procedure PrcsBtnMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure APIHooker1Click(Sender: TObject);
    procedure SaveProject1Click(Sender: TObject);
    procedure BPLDumper1Click(Sender: TObject);
    procedure RecentFileEditChange(Sender: TObject);
    procedure FileEditChange(Sender: TObject);
    procedure DirEditBeforeDialog(Sender: TObject; var Name: String;
      var Action: Boolean);
    procedure SaveDlgShow(Sender: TObject);
    procedure DeDeOpenDlgShow(Sender: TObject);
    procedure DCUDumper1Click(Sender: TObject);
    procedure DFMListEnter(Sender: TObject);
    procedure ClearTimerTimer(Sender: TObject);
    procedure DCULVEnter(Sender: TObject);
    procedure ControlsLVEnter(Sender: TObject);
    procedure DCULVExit(Sender: TObject);
    procedure DFMListExit(Sender: TObject);
    procedure LoadSymbolFile1Click(Sender: TObject);
    procedure Symbols1Click(Sender: TObject);
    procedure ClassesLVDblClick(Sender: TObject);
    procedure Panel2MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Panel2MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure DPR1Click(Sender: TObject);
    procedure DAPClick(Sender: TObject);
    procedure DFMListColumnClick(Sender: TObject; Column: TListColumn);
    procedure DFMListCompare(Sender: TObject; Item1, Item2: TListItem;
      Data: Integer; var Compare: Integer);
    procedure IDAMAPClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ExportFileNameBeforeDialog(Sender: TObject; var Name: String;
      var Action: Boolean);
    procedure FEChange(Sender: TObject);
    procedure MakePEHeader1Click(Sender: TObject);
    procedure doibClick(Sender: TObject);
    procedure PIULDrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure ExportFileNameAfterDialog(Sender: TObject; var Name: String;
      var Action: Boolean);
    procedure CustomCBClick(Sender: TObject);
    procedure DSFSpy1Click(Sender: TObject);
    procedure DCULVChange(Sender: TObject; Item: TListItem;
      Change: TItemChange);
    procedure crtBtnMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Analizethisclass1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure DeleteTimerTimer(Sender: TObject);
    procedure De1Click(Sender: TObject);
    procedure UnitDataLVChange(Sender: TObject; Item: TListItem;
      Change: TItemChange);
    procedure Saveunitdataasbinaryfile1Click(Sender: TObject);
    procedure DoItTimerTimer(Sender: TObject);
    procedure SaveProjectFile1Click(Sender: TObject);
    procedure LoadProjectFile1Click(Sender: TObject);
    procedure SaveProjectFileAs1Click(Sender: TObject);
    procedure ChangeLanguage(Sender: TObject);
    procedure FEKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
    FbSavedProject : Boolean;
    FbHiddenStuff, FbLoadDFMInMemo : Boolean;
    StandartDCUList : TStringList;
    function IdentCompiler(var AsOffset: String): String;
    procedure ClearDeDeLists;
    procedure FreeOpCodes;
    function GetLVFromClassName : String;
    procedure SaveEventHanlderDataInFile(FsFileName : String);
    procedure AssignDeDeDisAsms;
    {procedure ShowAPISPY; TO BE USED IN FUTURE !!!}
    Procedure FreeSymbolList;
    Procedure FreePlugIns;
    Procedure LoadDeDeRES;
    procedure CompileToSymAndLoadInSice(sMAPFilePath, sSicePath : String);
    procedure LoadLangMenuItems;
  public
    { Public declarations }
    sDelphiVersion : String;
    FsVersionHash : String;
    DFMFormList, UnitList : TStringlist;
    DFMNameList, PASNameList, CurrControlList,
    CurrNames, CurrIDs, SymbolsPath : TStringList;
    PEFile : ThePEFile;
    FbMemFump : Boolean;
//    FOpCodeList, FControlList : TList;
    FbProcessed, FbFailed, FbCutSelfPtr : Boolean;
    FFileType : TFileType;
    FsFileName : String;
    FsProjectName : String;
    DeDeProjectFileName : String;
    SymbolsList : TList;
    LoadedDOIList : TStringList;
    SymbolsToLoad : TStringList;
    ClassesDumper : TClassesDumper;
//    PEHeader : TPEHeader;
    FsLoadedDOIFile : String;
    ClassInfoList : TStringList;
    bShowLicense : Boolean;
    procedure DumpDFMNames;
    function IsDelphiApp : Boolean;
    //procedure ShowPEData;
    procedure PrepareProject(ssFN : String);
    Procedure CheckFolders;
    Procedure AppHint(AsHint : String);
    Procedure UnloadDSFSymbol(i : Integer);
    Procedure LoadSymbolFiles;
    Procedure LoadOffsetInfo;
    Procedure LoadDSFForDelphiTargetVersion;
    Procedure SetExitCtrls(bEnabled : Boolean);
    function PrepareDFM : TMemoryStream;
    function PrepareDFMByIndex(AiIndex : Integer; bIncludeDFMHeader : Boolean = True) : TMemoryStream;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -