如何在SysInit._InitExe调用之前放置代码?

时间:2018-02-28 08:58:13

标签: delphi assembly compilation delphi-7 vcl

我已将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单元不是一种选择。

enter image description here

2 个答案:

答案 0 :(得分:1)

使用内置工具无法满足您的需求。您需要对可执行文件进行一些编译后修改。

  1. 在源文件中包含首先需要执行的代码,以便将其编译为可执行文件,但不要调用它。
  2. 修改PE标头中的入口点以指向新的入口点代码。
  3. 安排新的入口点代码完成后跳转到原始入口点。

答案 1 :(得分:1)

您可以将asm代码放入新单元的初始化部分,并将此单元首先放入项目的uses子句中。这样代码应该在系统单元的初始化部分之后执行。 (一定要测试一下,我根本没试过。)