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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在SysInit._InitExe调用之前放置代码?相关的知识,希望对你有一定的参考价值。

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

答案

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

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

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

以上是关于如何在SysInit._InitExe调用之前放置代码?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 要求在完成处理程序中的返回值名称之前放置 _ [重复]

如何在视频的第一帧之前放置静止图像?

如何在 Android Studio (Kotlin) 中的流连接之前放置音频

如何在颤动的端点调用中正确放置参数?

Gtk TextView - 将光标放置或移动到文本末尾?

Rails:放置在哪里以及如何调用预定的清理方法