Возможно ли использование 64-разрядного кода Delphi для AV-стиля VCL во время выполнения?

Кажется, что не может быть пользовательского решения без исправления Delphi Tokyo, но, кажется, стоит спросить.

Самый простой способ сделать это AV воспроизводимым.

  1. Начать новый проект VCL.
  2. Измените Платформу на 64-битную.
  3. Связь с пакетами времени выполнения.
  4. Установите стиль на "Amakrits".
  5. Добавьте Флаг Высокой Энтропии ASLR. Примечание. Это выявляет множество ошибок в Win64.

Мой файл Dpr выглядит следующим образом (в основном блоке нет кода).

program MaskedCrash2;

{$SETPEOPTFLAGS $160} //High Entropy ASLR Flag causes issues with incorrect 64-bit programs.

uses
  Vcl.Forms,
  MaskedCrashed2MainUnt in 'MaskedCrashed2MainUnt.pas' {Form3},
  Vcl.Themes,
  Vcl.Styles;

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  TStyleManager.TrySetStyle('Amakrits');
  Application.CreateForm(TForm3, Form3);
  Application.Run;
end.

AV появляется в Delphi Tokyo в StyleUtils.inc в procedure TseBitmapLink.CheckingMasked(const Margin: TRect); ,

Несмотря на предупреждение, которое я недавно обнаружил в верхней части StyleUtils.inc:

//TODO -oUnassigned -cImplement : x64 : Implement PlatformNotImplemented in this unit or disable for x64.

Эта часть кода была очень стабильной в Delphi Berlin. Диалоги - другое дело, поскольку посты здесь показывают. Я отправил оскорбительный код на Портал качества.

Примечание. Чтобы получить ASLR с высокой энтропией (как показано в Process Explorer), необходимо использовать пакеты времени выполнения и установить бит High Entropy (20 долларов), а также 40 долларов за DEP и 100 долларов за ASLR.

Помимо повышения безопасности программы, использование High Entropy ASLR определенно способствует поиску ошибок в сообщениях Windows (например, использование приведения целых чисел в SendMessage, так далее.). При использовании High Entropy ASLR обнаружил много ошибок в моем коде при переключении на 64-битную маску.

Перекомпиляция пакетов времени выполнения не представляется вероятной, и было правильно предложено использовать ловушку времени выполнения.

Однако метод procedure TseBitmapLink.CheckingMasked(const Margin: TRect); входит в раздел реализации:

implementation

uses
  System.Types, System.UITypes, System.SysUtils, Winapi.UxTheme, Vcl.StdCtrls, Vcl.ComCtrls,
  Vcl.Mask, Vcl.GraphUtil, Vcl.ImgList, Vcl.Menus, Vcl.Grids, Vcl.CategoryButtons,
  Vcl.ButtonGroup, Vcl.ExtCtrls, Vcl.Consts, Vcl.SysStyles;

{$I StyleUtils.inc}
{$I StyleAPI.inc}

Так есть ли способ использовать хук времени выполнения в качестве TseBitmapLink недоступно для конечных пользователей, которые используют пакеты времени выполнения?

Это правильно?

У кого-нибудь есть предложения по сохранению High Entropy ASLR и Delphi Tokyo?

Извините, это заняло так много времени, пытаясь завершить.

0 ответов

Другие вопросы по тегам