Копировать содержимое подпрограммы в другое место в памяти - PullRequest
0 голосов
/ 15 февраля 2012

Я хочу скопировать код программы в памяти в другое место. Например,

procedure OldShowMessage;
begin
  ShowMessage('Old message..');
end;

Скажите, что я хочу скопировать процедуру в другое место в памяти. Я объявил что-то вроде

var
  lopShowMessage : procedure; // procedural pointer.

Какой-то псевдокод будет выглядеть как

// VirtualProtect(@OldShowMessage, <length of routine>, ..., ...);
// Allocate memory
// lopShowMessage := AllocMem(<length of routine>);
// Move(@OldMessage, Pointer(lopShowMessage)^, <length of routine>);
// FlushInstructioncache.....

Я просто хочу знать, есть ли возможность сделать это. Я пропатчил подпрограмму для вызова новой подпрограммы, но, поскольку мы помещаем инструкцию JMP с использованием обходных путей кода, я не могу использовать функциональность, предоставленную в старой подпрограмме.

Ссылка на мой предыдущий вопрос: здесь

1 Ответ

0 голосов
/ 16 февраля 2012

Если вы прочитаете технические подробности того, как обходы на самом деле работают, вы увидите, что вы можете использовать старую подпрограмму, используя trampoline как часть своего обходного пути. Затем вы можете позвонить на батуте, когда захотите вызвать старую процедуру.

...