Вниз
Скачать: 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.03 c
11-1131195038
igi
2005-11-05 15:50
2006.08.27
свойство flat не работает


15-1154078672
Ketmar
2006-07-28 13:24
2006.08.27
я туп в интерфейсах %-(


2-1154029431
Chort
2006-07-27 23:43
2006.08.27
Информация о файле


9-1133327946
Da Stranger
2005-11-30 08:19
2006.08.27
Про стрельбу


15-1154510916
SPeller
2006-08-02 13:28
2006.08.27
Глюк IE. Помогите, кто чем может




   Наверх