Delphi+asm

Delphi_Watcher
Дата: 04.10.2019 10:51:15
Есть массив
var
  arr:  array[0..84991] of Byte =(
$4d,$5a,$90,$00,$03,$00,$00,$00,$04,$00,$00,$00,$ff,$ff,$00,$00,
$b8,$00,$00,$00,$00,$00,$00,$00,$40,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,...
......
$00);
y:Pointer;


Не получается запустить его на выполнение:

asm
  MOV EAX, y
  LEA EBX, arr[0]
  CALL EBX
end;

Помогите запустить массив.

Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
Delphi_Watcher
Дата: 04.10.2019 11:13:01
alekcvp
Дата: 04.10.2019 11:21:41
Delphi_Watcher
alekcvp
Delphi_Watcher,
https://stackoverflow.com/questions/38113551/can-i-execute-code-that-resides-in-data-segment-elf-binary

не понятная статья

Тогда, в твоём случае: выполнять код, который находится в сегменте данных, запрещено на аппаратном уровне.
Delphi_Watcher
Дата: 04.10.2019 11:26:39
alekcvp, ДА можно как то на ассемблере выполнять код из массива делфи.
Vladimir Baskakov
Дата: 04.10.2019 11:34:24
Первый вопрос - зачем? Антивирусы позлить? ну если, чисто теоретически, то я бы попробовал сделать фейковую процедуру без параметров, которую оптимизатор не понимает, что ее можно выкинуть. Попытался записать исполняемый код в ее тушку, и перекрестясь....
Delphi_Watcher
Дата: 04.10.2019 11:46:57
подскажите что нужно в эти трех строках изменить, очень нужно.
MOV EAX, y
LEA EBX, arr[0]
CALL EBX
Vladimir Baskakov
Дата: 04.10.2019 11:46:58
прямо в своей ассемблерной процедуре, забейте 1000 NOP - ов, или еще какой то фигни, и по этому адресу и пишите свой код из массива. а потом выполняйте.
..................
если прям хочется интересной жизни
Vladimir Baskakov
Дата: 04.10.2019 11:51:51
Delphi_Watcher
подскажите что нужно в эти трех строках изменить, очень нужно.
MOV EAX, y
LEA EBX, arr[0]
CALL EBX


1) это курсовик или что?
2) я с ассемблером работал 20 лет назад. Не все на лету помню.
3) вставьте в ассемблерный код кучу нопов, и присвойте метку. Считайте адрес метки, и пропишите туда массив, байт за байтом или слово за словом. Потом сделайте туда джамп или колл. На метку. Где раньше были НОПЫ а теперь прилетело из массива.

антивирь скорее всего временно стоит отключить.
Vladimir Baskakov
Дата: 04.10.2019 11:55:42
если эта инструкция непонятна, лучше найти того кто ее понимает, или подождать критики этого подхода людьми, которые лучше понимают как работают современные процессоры и операционные системы.

Вариант. Записывать байт за байтом в правильное место dll свой код. Динамически загружать. Вызывать ее метод.
Профит!