📄 showpeunit.pas
字号:
Result.Add(s+'.'+s1);
End;
end;
procedure TPEIForm.SetOEnable(Enable: Boolean);
begin
If Enable Then
Begin
O1.OnClick:=O1Click;
O2.OnClick:=O2Click;
O4.OnClick:=O4Click;
O8.OnClick:=O8Click;
O10.OnClick:=O10Click;
O20.OnClick:=O20Click;
O40.OnClick:=O40Click;
O80.OnClick:=O80Click;
O100.OnClick:=O100Click;
O200.OnClick:=O200Click;
O400.OnClick:=O400Click;
O1000.OnClick:=O1000Click;
O2000.OnClick:=O2000Click;
O4000.OnClick:=O4000Click;
O8000.OnClick:=O8000Click;
End
Else Begin
O1.OnClick:=nil;
O2.OnClick:=nil;
O4.OnClick:=nil;
O8.OnClick:=nil;
O10.OnClick:=nil;
O20.OnClick:=nil;
O40.OnClick:=nil;
O80.OnClick:=nil;
O100.OnClick:=nil;
O200.OnClick:=nil;
O400.OnClick:=nil;
O1000.OnClick:=nil;
O2000.OnClick:=nil;
O4000.OnClick:=nil;
O8000.OnClick:=nil;
End;
end;
procedure TPEIForm.O1Click(Sender: TObject);
begin
O1.OnClick:=nil;
O1.Checked:=not O1.Checked;
O1.OnClick:=O1Click;
ShowMessage(dscr_o1);
end;
procedure TPEIForm.O2Click(Sender: TObject);
begin
O2.OnClick:=nil;
O2.Checked:=not O2.Checked;
O2.OnClick:=O2Click;
ShowMessage(dscr_o2);
end;
procedure TPEIForm.O4Click(Sender: TObject);
begin
O4.OnClick:=nil;
O4.Checked:=not O4.Checked;
O4.OnClick:=O4Click;
ShowMessage(dscr_o4);
end;
procedure TPEIForm.O8Click(Sender: TObject);
begin
O8.OnClick:=nil;
O8.Checked:=not O8.Checked;
O8.OnClick:=O8Click;
ShowMessage(dscr_o8);
end;
procedure TPEIForm.O10Click(Sender: TObject);
begin
O10.OnClick:=nil;
O10.Checked:=not O10.Checked;
O10.OnClick:=O10Click;
ShowMessage(dscr_o10);
end;
procedure TPEIForm.O20Click(Sender: TObject);
begin
O20.OnClick:=nil;
O20.Checked:=not O20.Checked;
O20.OnClick:=O20Click;
ShowMessage(dscr_o20);
end;
procedure TPEIForm.O80Click(Sender: TObject);
begin
O80.OnClick:=nil;
O80.Checked:=not O80.Checked;
O80.OnClick:=O80Click;
ShowMessage(dscr_o80);
end;
procedure TPEIForm.O40Click(Sender: TObject);
begin
O40.OnClick:=nil;
O40.Checked:=not O40.Checked;
O40.OnClick:=O40Click;
ShowMessage(dscr_o40);
end;
procedure TPEIForm.O1000Click(Sender: TObject);
begin
O1000.OnClick:=nil;
O1000.Checked:=not O1000.Checked;
O1000.OnClick:=O1000Click;
ShowMessage(dscr_o1000);
end;
procedure TPEIForm.O2000Click(Sender: TObject);
begin
O2000.OnClick:=nil;
O2000.Checked:=not O2000.Checked;
O2000.OnClick:=O2000Click;
ShowMessage(dscr_o2000);
end;
procedure TPEIForm.O4000Click(Sender: TObject);
begin
O4000.OnClick:=nil;
O4000.Checked:=not O4000.Checked;
O4000.OnClick:=O4000Click;
ShowMessage(dscr_o4000);
end;
procedure TPEIForm.O8000Click(Sender: TObject);
begin
O8000.OnClick:=nil;
O8000.Checked:=not O8000.Checked;
O8000.OnClick:=O8000Click;
ShowMessage(dscr_o8000);
end;
procedure TPEIForm.O100Click(Sender: TObject);
begin
O100.OnClick:=nil;
O100.Checked:=not O100.Checked;
O100.OnClick:=O100Click;
ShowMessage(dscr_o100);
end;
procedure TPEIForm.O200Click(Sender: TObject);
begin
O200.OnClick:=nil;
O200.Checked:=not O200.Checked;
O200.OnClick:=O200Click;
ShowMessage(dscr_o200);
end;
procedure TPEIForm.O400Click(Sender: TObject);
begin
O400.OnClick:=nil;
O400.Checked:=not O400.Checked;
O400.OnClick:=O400Click;
ShowMessage(dscr_o400);
end;
procedure TPEIForm.SaveOldRowChanges;
procedure CheckHexValue(s : String);
begin
try
StrToInt('$'+s);
except
on e : Exception do
Raise Exception.Create(s+' is not valid hex value');
end;
end;
begin
if OldRow=-1 then exit;
CheckHexValue(RVAEdit.Text);
ObjectSGrid.Cells[1,OldRow]:=RVAEdit.Text;
CheckHexValue(PhysOffsetEdit.Text);
ObjectSGrid.Cells[2,OldRow]:=PhysOffsetEdit.Text;
CheckHexValue(PhysSizeEdit.Text);
ObjectSGrid.Cells[3,OldRow]:=PhysSizeEdit.Text;
CheckHexValue(VirtSizeEdit.Text);
ObjectSGrid.Cells[4,OldRow]:=VirtSizeEdit.Text;
CheckHexValue(FlagsEdit.Text);
ObjectSGrid.Cells[5,OldRow]:=FlagsEdit.Text;
end;
procedure TPEIForm.Button2Click(Sender: TObject);
begin
if Not bELF
then PEHeader.Dump(Self.PEFile)
else Raise Exception.Create('This is not PE file !');
ShowPEData;
FormShow(self);
end;
procedure TPEIForm.FlagsEditKeyPress(Sender: TObject; var Key: Char);
begin
Button9Click(self);
end;
procedure TPEIForm.LoadDirectoryInfo;
begin
With PEHeader Do
begin
Edit1.Text:=DWORD2HEX(EXPORT_TABLE_RVA);
Edit2.Text:=DWORD2HEX(TOTAL_EXPORT_DATA_SIZE);
Edit3.Text:=DWORD2HEX(IMPORT_TABLE_RVA);
Edit4.Text:=DWORD2HEX(TOTAL_IMPORT_DATA_SIZE);
Edit5.Text:=DWORD2HEX(RESOURCE_TABLE_RVA);
Edit6.Text:=DWORD2HEX(TOTAL_RESOURCE_DATA_SIZE);
Edit7.Text:=DWORD2HEX(EXCEPTION_TABLE_RVA);
Edit8.Text:=DWORD2HEX(TOTAL_EXCEPTION_DATA_SIZE);
Edit9.Text:=DWORD2HEX(SECURITY_TABLE_RVA);
Edit10.Text:=DWORD2HEX(TOTAL_SECURITY_DATA_SIZE);
Edit11.Text:=DWORD2HEX(FIXUP_TABLE_RVA);
Edit12.Text:=DWORD2HEX(TOTAL_FIXUP_DATA_SIZE);
Edit13.Text:=DWORD2HEX(DEBUG_TABLE_RVA);
Edit14.Text:=DWORD2HEX(TOTAL_DEBUG_DIRECTORIES);
Edit15.Text:=DWORD2HEX(IMAGE_DESCRIPTION_RVA);
Edit16.Text:=DWORD2HEX(TOTAL_DESCRIPTION_SIZE);
Edit17.Text:=DWORD2HEX(MACHINE_SPECIFIC_RVA);
Edit18.Text:=DWORD2HEX(MACHINE_SPECIFIC_SIZE);
Edit19.Text:=DWORD2HEX(THREAD_LOCAL_STORAGE_RVA);
Edit20.Text:=DWORD2HEX(TOTAL_TLS_SIZE);
Edit21.Text:=DWORD2HEX(Load_Config_Table_RVA);
Edit22.Text:=DWORD2HEX(Load_Config_Table_Size);
Edit23.Text:=DWORD2HEX(Bound_Import_RVA);
Edit24.Text:=DWORD2HEX(Bound_Import_Size);
Edit25.Text:=DWORD2HEX(IAT_RVA);
Edit26.Text:=DWORD2HEX(IAT_Size);
Edit27.Text:=DWORD2HEX(Delay_Import_Descriptor_RVA);
Edit28.Text:=DWORD2HEX(Delay_Import_Descriptor_Size);
Edit29.Text:=DWORD2HEX(COM_Runtime_Header_RVA);
Edit30.Text:=DWORD2HEX(COM_Runtime_Header_Size);
end;
end;
procedure TPEIForm.Button4Click(Sender: TObject);
begin
LoadDirectoryInfo;
end;
procedure TPEIForm.Button3Click(Sender: TObject);
var i : Integer;
edt : TEdit;
lPEHOffset : DWORD;
function CheckHexValue(s : String) : Boolean;
begin
Result:=False;
try
StrToInt('$'+s);
Result:=True;
except
on e : Exception do ShowMessage(s+' is not valid hex value');
end;
end;
var
sNewFile : String;
begin
SaveDlg.InitialDir:=ExtractFileDir(PEFile.sFileName);
SaveDlg.FileName:=PEFile.sFileName;
if not SaveDlg.Execute then exit;
//If MessageDlg(wrn_change_file,
// mtConfirmation,[mbYes,mbNo],0)=mrNo Then Exit;
for i:=0 to PEIForm.ComponentCount-1 do
begin
if PEIForm.Components[i].Tag<>-784 then continue;
edt:=TEdit(PEIForm.Components[i]);
if not CheckHexValue(edt.Text) then begin edt.SetFocus; exit end;
end;
With PEHeader Do
begin
EXPORT_TABLE_RVA:=HEX2DWORD(Edit1.Text);
TOTAL_EXPORT_DATA_SIZE:=HEX2DWORD(Edit2.Text);
IMPORT_TABLE_RVA:=HEX2DWORD(Edit3.Text);
TOTAL_IMPORT_DATA_SIZE:=HEX2DWORD(Edit4.Text);
RESOURCE_TABLE_RVA:=HEX2DWORD(Edit5.Text);
TOTAL_RESOURCE_DATA_SIZE:=HEX2DWORD(Edit6.Text);
EXCEPTION_TABLE_RVA:=HEX2DWORD(Edit7.Text);
TOTAL_EXCEPTION_DATA_SIZE:=HEX2DWORD(Edit8.Text);
SECURITY_TABLE_RVA:=HEX2DWORD(Edit9.Text);
TOTAL_SECURITY_DATA_SIZE:=HEX2DWORD(Edit10.Text);
FIXUP_TABLE_RVA:=HEX2DWORD(Edit11.Text);
TOTAL_FIXUP_DATA_SIZE:=HEX2DWORD(Edit12.Text);
DEBUG_TABLE_RVA:=HEX2DWORD(Edit13.Text);
TOTAL_DEBUG_DIRECTORIES:=HEX2DWORD(Edit14.Text);
IMAGE_DESCRIPTION_RVA:=HEX2DWORD(Edit15.Text);
TOTAL_DESCRIPTION_SIZE:=HEX2DWORD(Edit16.Text);
MACHINE_SPECIFIC_RVA:=HEX2DWORD(Edit17.Text);
MACHINE_SPECIFIC_SIZE:=HEX2DWORD(Edit18.Text);
THREAD_LOCAL_STORAGE_RVA:=HEX2DWORD(Edit19.Text);
TOTAL_TLS_SIZE:=HEX2DWORD(Edit20.Text);
Load_Config_Table_RVA:=HEX2DWORD(Edit21.Text);
Load_Config_Table_Size:=HEX2DWORD(Edit22.Text);
Bound_Import_RVA:=HEX2DWORD(Edit23.Text);
Bound_Import_Size:=HEX2DWORD(Edit24.Text);
IAT_RVA:=HEX2DWORD(Edit25.Text);
IAT_Size:=HEX2DWORD(Edit26.Text);
Delay_Import_Descriptor_RVA:=HEX2DWORD(Edit27.Text);
Delay_Import_Descriptor_Size:=HEX2DWORD(Edit28.Text);
COM_Runtime_Header_RVA:=HEX2DWORD(Edit29.Text);
COM_Runtime_Header_Size:=HEX2DWORD(Edit30.Text);
PEFile.PEStream.Seek(DATA_FOR_PE_HEADER_OFFSET,soFromBeginning);
PEFile.PEStream.ReadBuffer(lPEHOffset,2);
PEFile.PEStream.Seek($78+lPEHOffset,soFromBeginning);
PEFile.PEStream.WriteBuffer(EXPORT_TABLE_RVA,4);
PEFile.PEStream.WriteBuffer(TOTAL_EXPORT_DATA_SIZE,4);
PEFile.PEStream.WriteBuffer(IMPORT_TABLE_RVA,4);
PEFile.PEStream.WriteBuffer(TOTAL_IMPORT_DATA_SIZE,4);
PEFile.PEStream.WriteBuffer(RESOURCE_TABLE_RVA,4);
PEFile.PEStream.WriteBuffer(TOTAL_RESOURCE_DATA_SIZE,4);
PEFile.PEStream.WriteBuffer(EXCEPTION_TABLE_RVA,4);
PEFile.PEStream.WriteBuffer(TOTAL_EXCEPTION_DATA_SIZE,4);
PEFile.PEStream.WriteBuffer(SECURITY_TABLE_RVA,4);
PEFile.PEStream.WriteBuffer(TOTAL_SECURITY_DATA_SIZE,4);
PEFile.PEStream.WriteBuffer(FIXUP_TABLE_RVA,4);
PEFile.PEStream.WriteBuffer(TOTAL_FIXUP_DATA_SIZE,4);
PEFile.PEStream.WriteBuffer(DEBUG_TABLE_RVA,4);
PEFile.PEStream.WriteBuffer(TOTAL_DEBUG_DIRECTORIES,4);
PEFile.PEStream.WriteBuffer(IMAGE_DESCRIPTION_RVA,4);
PEFile.PEStream.WriteBuffer(TOTAL_DESCRIPTION_SIZE,4);
PEFile.PEStream.WriteBuffer(MACHINE_SPECIFIC_RVA,4);
PEFile.PEStream.WriteBuffer(MACHINE_SPECIFIC_SIZE,4);
PEFile.PEStream.WriteBuffer(Thread_LOCAL_STORAGE_RVA,4);
PEFile.PEStream.WriteBuffer(TOTAL_TLS_SIZE,4);
PEFile.PEStream.WriteBuffer(Load_Config_Table_RVA,4);
PEFile.PEStream.WriteBuffer(Load_Config_Table_Size,4);
PEFile.PEStream.WriteBuffer(Bound_Import_RVA,4);
PEFile.PEStream.WriteBuffer(Bound_Import_Size,4);
PEFile.PEStream.WriteBuffer(IAT_RVA,4);
PEFile.PEStream.WriteBuffer(IAT_Size,4);
PEFile.PEStream.WriteBuffer(Delay_Import_Descriptor_RVA,4);
PEFile.PEStream.WriteBuffer(Delay_Import_Descriptor_Size,4);
PEFile.PEStream.WriteBuffer(COM_Runtime_Header_RVA,4);
PEFile.PEStream.WriteBuffer(COM_Runtime_Header_Size,4);
end;
Try
PEFile.PEStream.SaveToFile(SaveDlg.FileName{FsFileName});
ShowMessage(msg_save_succ);
Except
on e: Exception do
ShowMessage(msg_save_not_succ+#13#10+e.Message);
End;
end;
procedure TPEIForm.ObjectSGridMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var ARow : Integer;
begin
if (x<429) or (x>515) then
begin
Application.HideHint;
exit;
end;
ARow:=((y-15) div 15)+1;
if ARow>PEHeader.ObjectNum then ARow:=PEHeader.ObjectNum;
_sHint:=ObjectSGrid.Cells[0,ARow]+' RVA '+ObjectSGrid.Cells[1,ARow]+#13#13
+PEHeader.Objects[1].DecodeFlags(Hex2DWORD(ObjectSGrid.Cells[5,ARow]));
if ObjectSGrid.Hint<>_sHint then
begin
Application.HideHint;
ShowHint := False;
ObjectSGrid.Hint:=_sHint;
end
else if (not ShowHint) then ShowHint := True;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -