📄 mainunit.pas
字号:
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 + -