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

📄 showpeunit.pas

📁 dede 的源代码 3.10b
💻 PAS
📖 第 1 页 / 共 3 页
字号:
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 + -