Форум: "Прочее";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];
ВнизПомогите с кодом Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c