📄 showpeunit.pas
字号:
unit ShowPEUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, ExtCtrls, Buttons, Grids, DeDeClasses;
type
TPEIForm = class(TForm)
PETab: TPageControl;
PEPage: TTabSheet;
Label21: TLabel;
Label23: TLabel;
Label25: TLabel;
Label27: TLabel;
Label29: TLabel;
Label31: TLabel;
Label33: TLabel;
Label35: TLabel;
Label37: TLabel;
l1: TLabel;
l2: TLabel;
Label22: TLabel;
Label12: TLabel;
Label63: TLabel;
Label65: TLabel;
Bevel9: TBevel;
Bevel10: TBevel;
Label64: TLabel;
Label66: TLabel;
Label68: TLabel;
Bevel11: TBevel;
Bevel12: TBevel;
Label67: TLabel;
Label39: TLabel;
Label43: TLabel;
Label47: TLabel;
Label40: TLabel;
Bevel13: TBevel;
Bevel14: TBevel;
Bevel15: TBevel;
SMDBtn: TButton;
ObjectsSheet: TTabSheet;
Label1: TLabel;
SectionDataLbl: TLabel;
Label2: TLabel;
Label4: TLabel;
Label13: TLabel;
Label15: TLabel;
Label17: TLabel;
Label19: TLabel;
SesDescriptionLbl: TLabel;
Label71: TLabel;
Label73: TLabel;
SesIDLbl: TLabel;
ObjectSGrid: TStringGrid;
RVAEdit: TEdit;
SectionNameCombo: TComboBox;
PhysOffsetEdit: TEdit;
PhysSizeEdit: TEdit;
VirtSizeEdit: TEdit;
FlagsEdit: TEdit;
Button1: TButton;
Button9: TButton;
Button10: TButton;
TabSheet7: TTabSheet;
Label24: TLabel;
ExpTlbRVALbl: TLabel;
Label28: TLabel;
TExpSizeLbl: TLabel;
ExpPhOffsetLbl: TLabel;
Label11: TLabel;
Label9: TLabel;
Exp1Lbl: TLabel;
Label14: TLabel;
Exp2Lbl: TLabel;
Label16: TLabel;
Exp3Lbl: TLabel;
Label18: TLabel;
Exp4Lbl: TLabel;
Label20: TLabel;
Exp5Lbl: TLabel;
Label70: TLabel;
Exp6Lbl: TLabel;
Label72: TLabel;
Exp7Lbl: TLabel;
Label74: TLabel;
Exp8Lbl: TLabel;
Label76: TLabel;
Exp9Lbl: TLabel;
Bevel16: TBevel;
Bevel17: TBevel;
Bevel18: TBevel;
Bevel19: TBevel;
Bevel20: TBevel;
Button8: TButton;
ExportLV: TListView;
TabSheet8: TTabSheet;
Label26: TLabel;
Label30: TLabel;
TImpSizeLbl: TLabel;
ImpTlbRVALbl: TLabel;
PhysImLbl: TLabel;
Label52: TLabel;
Label51: TLabel;
Label53: TLabel;
DLLNumLbl: TLabel;
ProcNumLbl: TLabel;
Button6: TButton;
DLLMemo: TListBox;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
ImportList: TListView;
TabSheet2: TTabSheet;
ImportTree: TTreeView;
TabSheet3: TTabSheet;
Bevel2: TBevel;
Bevel3: TBevel;
Bevel1: TBevel;
Bevel8: TBevel;
Bevel5: TBevel;
Bevel6: TBevel;
Bevel4: TBevel;
Bevel7: TBevel;
Label59: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label10: TLabel;
Label8: TLabel;
Label60: TLabel;
Label62: TLabel;
PEHdrOffsetLbl: TLabel;
SignLbl: TLabel;
CPULbl: TLabel;
ONumLbl: TLabel;
NTHDRLbl: TLabel;
TSLbl: TLabel;
SymTblOffsetLbl: TLabel;
SymNumLbl: TLabel;
O100: TCheckBox;
O200: TCheckBox;
O400: TCheckBox;
O8000: TCheckBox;
O4000: TCheckBox;
O2000: TCheckBox;
O1000: TCheckBox;
O40: TCheckBox;
O80: TCheckBox;
O20: TCheckBox;
O10: TCheckBox;
O8: TCheckBox;
O4: TCheckBox;
O2: TCheckBox;
O1: TCheckBox;
PETypeLbl: TLabel;
LinkerLbl: TLabel;
ImBaseLbl: TLabel;
ImSizeLbl: TLabel;
OalignLbl: TLabel;
FAlignLbl: TLabel;
OSVerLbl: TLabel;
UserVerLbl: TLabel;
SubVerLbl: TLabel;
LFLbl: TLabel;
SizeOfCodeLbl: TLabel;
SizeOfIDataLbl: TLabel;
SizeOfUDataLbl: TLabel;
StackRSzLbl: TLabel;
StackCSzLbl: TLabel;
HeapRSzLbl: TLabel;
HeapCSzLbl: TLabel;
VASizeLbl: TLabel;
FChkLbl: TLabel;
HeadSizeLbl: TLabel;
ExcSizeLbl: TLabel;
ExcRVALbl: TLabel;
SecSizeLbl: TLabel;
SecRVALbl: TLabel;
MachSzLbl: TLabel;
MachSpLbl: TLabel;
DescrSizeLbl: TLabel;
ImDescrLbl: TLabel;
RVAELbl: TLabel;
BOCLbl: TLabel;
BODLbl: TLabel;
SubsysLbl: TLabel;
DllFlagsLbl: TLabel;
Button2: TButton;
DirectorySheet: TTabSheet;
Button3: TButton;
Button4: TButton;
DirectoryGroup: TGroupBox;
DirectoryPanel: TPanel;
Label32: TLabel;
Label34: TLabel;
Label3: TLabel;
Label41: TLabel;
Label42: TLabel;
Label44: TLabel;
Label45: TLabel;
Label46: TLabel;
Label48: TLabel;
Label57: TLabel;
Label56: TLabel;
Label55: TLabel;
Label54: TLabel;
Label50: TLabel;
Label49: TLabel;
Label36: TLabel;
Label38: TLabel;
Edit2: TEdit;
Edit1: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit6: TEdit;
Edit5: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit10: TEdit;
Edit9: TEdit;
Edit13: TEdit;
Edit11: TEdit;
Edit12: TEdit;
Edit14: TEdit;
Edit25: TEdit;
Edit26: TEdit;
Edit24: TEdit;
Edit23: TEdit;
Edit21: TEdit;
Edit22: TEdit;
Edit20: TEdit;
Edit19: TEdit;
Edit17: TEdit;
Edit18: TEdit;
Edit16: TEdit;
Edit15: TEdit;
Label58: TLabel;
Edit28: TEdit;
Edit27: TEdit;
Label61: TLabel;
Edit30: TEdit;
Edit29: TEdit;
SaveDlg: TSaveDialog;
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ObjectSGridSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure Button6Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure O1Click(Sender: TObject);
procedure O2Click(Sender: TObject);
procedure O4Click(Sender: TObject);
procedure O8Click(Sender: TObject);
procedure O10Click(Sender: TObject);
procedure O20Click(Sender: TObject);
procedure O80Click(Sender: TObject);
procedure O40Click(Sender: TObject);
procedure O1000Click(Sender: TObject);
procedure O2000Click(Sender: TObject);
procedure O4000Click(Sender: TObject);
procedure O8000Click(Sender: TObject);
procedure O100Click(Sender: TObject);
procedure O200Click(Sender: TObject);
procedure O400Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FlagsEditKeyPress(Sender: TObject; var Key: Char);
procedure Button4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ObjectSGridMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
_bHint : Boolean;
_shint : String;
OldRow : Integer;
procedure InitLabels;
procedure LoadSectionInformationForEditing(ARow: Integer);
procedure SetOEnable(Enable : Boolean);
procedure SaveOldRowChanges;
procedure LoadDirectoryInfo;
public
{ Public declarations }
PEResDir : TPEResDir;
PEFixupTable : TPEFixupTable;
PEImportData : TPEImportData;
PETLSTable : TPETLSTable;
PEExports : TPEExports;
PEHeader : TPEHeader;
PEFile : ThePEFile;
FsFileName : String;
function PrepareImports : TStringList;
Procedure ShowPEData;
end;
var
PEIForm: TPEIForm;
implementation
uses MainUnit, HEXTools, Clipbrd, SectionEditUnit, DeDeRES;
{$R *.DFM}
procedure TPEIForm.FormShow(Sender: TObject);
var i : Integer;
b1,b2 : Byte;
begin
PEFile.Seek(DATA_FOR_PE_HEADER_OFFSET);
PEFile.Read(b1,b2);
PEHdrOffsetLbl.Caption:=WORD2HEX(b1+b2*256);
With PEHeader Do
Begin
{OPTIONAL PE HEADER}
PETypeLbl.Caption:=OptionalPEType;
LinkerLbl.Caption:=LMAJOR_MINOR;
SizeOfCodeLbl.Caption:=IntToHex(SizeOfCode,8);
SizeOfIDataLbl.Caption:=IntToHex(SizeOfInitializedData,8);
SizeOfUDataLbl.Caption:=IntToHex(SizeOfUninitializedData,8);
RVAELbl.Caption:=IntToHex(RVA_ENTRYPOINT,8);
BODLbl.Caption:=IntToHex(BaseOfData,8);
BOCLbl.Caption:=IntToHex(BaseOfCode,8);
ImBaseLbl.Caption:=IntToHex(IMAGE_BASE,8);
OAlignLbl.Caption:=IntToHex(OBJECT_ALIGN,8);
FAlignLbl.Caption:=IntToHex(FILE_ALIGN,8);
OSVerLbl.Caption:=IntToHex(OSMAJOR_MINOR,8);
UserVerLbl.Caption:=IntToHex(USERMAJOR_MINOR,8);
SubVerLbl.Caption:=IntToHex(SUBSYSMAJOR_MINOR,8);
ImSizeLbl.Caption:=IntToHex(IMAGE_SIZE,8);
HeadSizeLbl.Caption:=IntToHex(HEADER_SIZE,8);
FChkLbl.Caption:=IntToHex(FILE_CHECKSUM,8);
SubsysLbl.Caption:=SUBSYSTEM;
DLLFlagsLbl.Caption:=DLL_FLAGS;
StackRSzLbl.Caption:=IntToHex(STACK_RESERVE_SIZE,8);
StackCSzLbl.Caption:=IntToHex(STACK_COMMIT_SIZE,8);
HeapRSzLbl.Caption:=IntToHex(HEAP_RESERVE_SIZE,8);
HeapCSzLbl.Caption:=IntToHex(HEAP_COMMIT_SIZE,8);
LFLbl.Caption:=IntToHex(LoaderFlags,8);
VASizeLbl.Caption:=IntToHex(VA_ARRAY_SIZE,8);
ImDescrLbl.Caption:=IntToHex(IMAGE_DESCRIPTION_RVA,8);
DescrSizeLbl.Caption:=IntToHex(TOTAL_DESCRIPTION_SIZE,8);
MachSpLbl.Caption:=IntToHex(MACHINE_SPECIFIC_RVA,8);
MachSzLbl.Caption:=IntToHex(MACHINE_SPECIFIC_SIZE,8);
ExpTlbRVALbl.Caption:=IntToHex(EXPORT_TABLE_RVA,8);
TExpSizeLbl.Caption:=IntToHex(TOTAL_EXPORT_DATA_SIZE,8);
ImpTlbRVALbl.Caption:=IntToHex(IMPORT_TABLE_RVA,8);
TImpSizeLbl.Caption:=IntToHex(TOTAL_IMPORT_DATA_SIZE,8);
ExcRVALbl.Caption:=IntToHex(EXCEPTION_TABLE_RVA,8);
ExcSizeLbl.Caption:=IntToHex(TOTAL_EXCEPTION_DATA_SIZE,8);
SecRVALbl.Caption:=IntToHex(SECURITY_TABLE_RVA,8);
SecSizeLbl.Caption:=IntToHex(TOTAL_SECURITY_DATA_SIZE,8);
If (Load_Config_Table_RVA+Bound_Import_RVA+IAT_RVA
+Delay_Import_Descriptor_RVA+COM_Runtime_Header_RVA)<>0
Then SMDBtn.Enabled:=True
Else SMDBtn.Enabled:=False;
LoadDirectoryInfo;
end;
ObjectSGrid.RowCount:=1+PEHeader.ObjectNum;
ObjectSGrid.FixedRows:=1;
{OBJECT TABLE}
For i:=1 To PEHeader.ObjectNum Do
With ObjectSGrid Do
Begin
Cells[0,i]:='';Cells[1,i]:='';Cells[2,i]:='';Cells[3,i]:='';Cells[4,i]:='';Cells[5,i]:='';
Cells[6,i]:='';Cells[7,i]:='';Cells[8,i]:='';Cells[9,i]:='';
End;
For i:=1 To PEHeader.ObjectNum Do
With ObjectSGrid Do
Begin
{name}Cells[0,i]:=PEHeader.Objects[i].OBJECT_NAME;
{RVA} Cells[1,i]:=DWord2Hex(PEHeader.Objects[i].RVA);
{ofs} Cells[2,i]:=DWord2Hex(PEHeader.Objects[i].PHYSICAL_OFFSET);
{size}Cells[3,i]:=DWord2Hex(PEHeader.Objects[i].PHYSICAL_SIZE);
{v.sz}Cells[4,i]:=DWord2Hex(PEHeader.Objects[i].VIRTUAL_SIZE);
{flgs}Cells[5,i]:=DWord2Hex(PEHeader.Objects[i].FLAGS);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -