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

问题描述 投票:1回答:2

我把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

delphi assembly compilation delphi-7 vcl
2个回答
1
投票

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

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

1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.