如何在 SysInit._InitExe 调用之前放置代码?
How can I place code before SysInit._InitExe call?
我已经把 asm INT 3 end;
放在了我的主程序的第一行。
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
asm INT 3 end;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
然而,SysInit._InitExe 调用放在它之前。
请参考下图。
从 uses 子句中删除 VCL 单元不是一个选项。
使用 built-in 工具无法满足您的需求。您需要对可执行文件进行一些 post 编译修改。
- 在源文件中包含您需要首先执行的代码,以便将其编译成可执行文件,但不要调用它。
- 修改 PE 中的入口点 header 以指向您的新入口点代码。
- 安排您的新入口点代码在完成后跳转到原始入口点。
您可以将 asm 代码放入新单元的初始化部分,并将该单元首先放入项目的 uses 子句中。这样代码应该在系统单元的初始化部分之后执行。 (这个一定要测试,我完全没试过。)
我已经把 asm INT 3 end;
放在了我的主程序的第一行。
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
asm INT 3 end;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
然而,SysInit._InitExe 调用放在它之前。 请参考下图。 从 uses 子句中删除 VCL 单元不是一个选项。
使用 built-in 工具无法满足您的需求。您需要对可执行文件进行一些 post 编译修改。
- 在源文件中包含您需要首先执行的代码,以便将其编译成可执行文件,但不要调用它。
- 修改 PE 中的入口点 header 以指向您的新入口点代码。
- 安排您的新入口点代码在完成后跳转到原始入口点。
您可以将 asm 代码放入新单元的初始化部分,并将该单元首先放入项目的 uses 子句中。这样代码应该在系统单元的初始化部分之后执行。 (这个一定要测试,我完全没试过。)