Главная страница
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.027 c
2-1154332057
Gamer
2006-07-31 11:47
2006.08.27
Перенести информацию (с картинками) с двух RichEdit ов в один


2-1154779776
AlexanderMS
2006-08-05 16:09
2006.08.27
Убрать прямоугольную рамку фокуса в ListBox.


11-1131614466
-=Mike=-
2005-11-10 12:21
2006.08.27
Не получается послать post-сообщение окну


2-1154521843
AlexanderMS
2006-08-02 16:30
2006.08.27
Файлы ярлыков (*.lnk)


8-1135260332
NailMan
2005-12-22 17:05
2006.08.27
[DShow] Фильтр для настройки яркости и пр.