Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.27;
Скачать: CL | DM;

Вниз

Помогите с кодом   Найти похожие ветки 

 
test'er   (2006-07-28 16:10) [0]

....
implementation

{$R *.dfm}

procedure TForm1.test;
begin
 ShowMessage("Hello Word");
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 h: Integer;
begin
 h:= FileCreate("d:\test.hex");
 if h>1 then begin
    FileWrite(h, адрес , длинна кода процедуры test);
    FileClose(h);
 end else ShowMessage("Не смог создать!");
end;

end.

// Вообщем просто нужно сохранить в файле код процедуры, так вот как вычислить её длину и что указать во втором параметре FileWrite (Buffer) ?


 
Юрий Зотов ©   (2006-07-28 16:22) [1]

Не знаю, относится ли это к методам объектов, но код обычных функций идет в прорядке из реализации. То есть, длина кода процедуры вычисляется так:

procedure Test;
begin
 ...
end;

function GetTestLength: cardinal;
begin
 Result := Cardinal(@GetTestLength) - Cardinal(@Test)
end;

Соответственно, записывать надо буфер начиная с адреса @Test и длиной, которую дает GetTestLength.

Но все это мало что даст. Загрузить ранее сохраненный код - не вопрос, а вот выполнить его удастся только если он некритичен к собственному адресу и используемым им другим адресам.


 
Ketmar ©   (2006-07-28 16:49) [2]

а про "загрузить" и "выполнить" никто не спрашивал. %-)


 
test'er   (2006-07-28 16:55) [3]

procedure TForm1.Button1Click(Sender: TObject);
var
 Len, h: Integer;
begin

 Len:=   Cardinal(@Button1Click) - Cardinal(@Test);
 h:= FileCreate("d:\test.hex");
 if h>1 then begin
    FileWrite(h, @test, Len);
    FileClose(h);
 end else ShowMessage("Не смог создать!");
end;

// да оно то понятно, только variable required, как правильный синтаксис будет?


 
test'er   (2006-07-28 17:02) [4]

я что-то с адресацией не могу врубиться:(

- как будет ассемблерный аналог: mov edi, offset test
- что нужно дать 2-му параметру FileWrite что бы записать память допустим с 100 смещения


 
test'er   (2006-07-28 17:08) [5]

procedure TForm1.Button1Click(Sender: TObject);
var
 Len, h: Integer;
begin
 asm
    mov len, offset Button1Click;
    sub len, offset test;
 end;
 h:= FileCreate("d:\test.hex");
 if h>1 then begin
    FileWrite(h, test, Len);
    FileClose(h);
 end else ShowMessage("Не смог создать!");
end;

// Как заменить ассемблерный код?


 
Ketmar ©   (2006-07-28 18:00) [6]

какие, аднака, психотропные препараты нынче замороченые...


 
test'er   (2006-07-28 21:04) [7]


> какие, аднака, психотропные препараты нынче замороченые.
> ..


А тебе абы поприкалываться, подсказал бы лучше,
а если делать нехер то доводи до ума свой прокси-сервер,
нестабильный и кривой, но зато со скриптами (тоже кривыми) :)


 
Ketmar ©   (2006-07-30 12:02) [8]

>test"er   (28.07.06 21:04) [7]
а он уже доведен. всё, что мне надо, он делает. %-)



Страницы: 1 вся ветка

Текущий архив: 2006.08.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.039 c
2-1154597920
Grant
2006-08-03 13:38
2006.08.27
TClentDataSet


4-1146849360
Teddy24
2006-05-05 21:16
2006.08.27
Как средствами API поключить сетевой диск?


3-1150961470
worldmen
2006-06-22 11:31
2006.08.27
Узнать номер строки в TDBGridе или SQLе


15-1153955958
Dust
2006-07-27 03:19
2006.08.27
Редактор исходного кода с аутлайнингом


2-1154503790
Ivan Chuvashov
2006-08-02 11:29
2006.08.27
exe фаил