Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.026 c
2-1154649037
Балбес
2006-08-04 03:50
2006.08.27
Из стринга в чар


1-1151961973
Tonich
2006-07-04 01:26
2006.08.27
Создание обекта в потоке (Thread)


15-1153207818
novoalex
2006-07-18 11:30
2006.08.27
FreeBSD


2-1155124268
novill
2006-08-09 15:51
2006.08.27
Не могу понять суть такого рода объявлений


15-1154333399
GrayFace
2006-07-31 12:09
2006.08.27
Magic Forum Patch v0.0




   Наверх