Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1150649866
vrem
2006-06-18 20:57
2006.08.27
Галактик футбол


2-1155108350
DmitryNekl
2006-08-09 11:25
2006.08.27
Можно как-то прицепить rtf-файл к форме?


3-1150877258
Mishenka
2006-06-21 12:07
2006.08.27
Запись файла нулевой длины


2-1154649037
Балбес
2006-08-04 03:50
2006.08.27
Из стринга в чар


1-1152962597
zvizda
2006-07-15 15:23
2006.08.27
время





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский