📄 da_main.pas
字号:
unit DA_Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, SynEdit, SynEditHighlighter,
SynHighlighterAsm, ComCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
SynEdit1: TSynEdit;
SynAsmSyn1: TSynAsmSyn;
Button1: TButton;
Button2: TButton;
Button3: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
ProgressBar1: TProgressBar;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
PEStream: TMemoryStream;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{$R WindowsXP.res}
uses
DisAsm;
procedure TForm1.FormCreate(Sender: TObject);
begin
PEStream := TMemoryStream.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(PEStream);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
PEStream.Clear;
PEStream.LoadFromFile(OpenDialog1.FileName);
Button2.Enabled := True;
Button2.Click;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
OpCodeSize: Integer;
DisAssembler: TDisAsm;
strData, strDisAsm: String;
begin
SynEdit1.Lines.Clear;
Button1.Enabled := False;
Button2.Enabled := False;
Button3.Enabled := False;
SynEdit1.Visible := False;
Form1.Cursor := crHourGlass;
ProgressBar1.Position := 0;
DisAssembler := TDisAsm.Create;
Repeat
SetLength(strData, 17);
PEStream.Read(strData[1], 16);
strDisAsm := DisAssembler.GetInstruction(PChar(strData), OpCodeSize);
ProgressBar1.Position := PEStream.Position * 100 div PEStream.Size;
SynEdit1.Lines.Add(strDisAsm);
Application.ProcessMessages;
Until PEStream.Position >= PEStream.Size;
PEStream.Position := 0;
ProgressBar1.Position := 0;
Form1.Cursor := crDefault;
SynEdit1.Visible := True;
Button1.Enabled := True;
Button2.Enabled := True;
Button3.Enabled := True;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if SaveDialog1.Execute then
SynEdit1.Lines.SaveToFile(SaveDialog1.FileName);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -