Нужно сделать дыру в форме OnCreate в проекте на дельфи

Тема в разделе "WASM.ZEN", создана пользователем EvilsInterrupt, 19 май 2006.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Мне нужна дыра, но выполнимая, вот что я имею под этим:
    Код (Text):
    1. procedure TForm1.FormCreate(Sender: TObject);
    2. begin
    3.   asm
    4.   jmp @L
    5.     dd  $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF
    6.     dd  $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF
    7.     dd  $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF
    8.     dd  $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF
    9.     dd  $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF
    10.   @L:
    11.   end;
    12. end;
    но это не удачное решение т.к. когда мне понадобится дыра поболе, к примеру на 10 килобайт, то этот исходник уже выростит возможно ли это решить другим способом?



    ЗЫ:

    дельфи не давно начал читать
     
  2. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Может включить файл с набором тех-же $FFFFFFF? Для этого есть директива {$I filename.inc}

    Хотелось бы знать, для чего она тебе вдруг понадобилась, может есть более прямые альтернативы.
     
  3. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    alpet

    Спасибо! :)))
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Можно создать такую дырку в секции DATA:
    Код (Text):
    1. var
    2. hole : array [1..нужный_размер] of Byte;


    Потом вписать опкод JMP rel32:
    Код (Text):
    1. begin
    2.    hole[1] := $E9;
    3.    hole[2] := ((Length(hole) - 5) shr 0)  and $FF;
    4.    hole[3] := ((Length(hole) - 5) shr 8)  and $FF;
    5.    hole[4] := ((Length(hole) - 5) shr 16) and $FF;
    6.    hole[5] := ((Length(hole) - 5) shr 24) and $FF;


    Только массив будет заполнен нулями, а не 0xFF.



    Если нужна дыра в функции, то можно скомпилировать обьектник в тасме (кажется, тасм поддерживает dup) и прилинковать к Delphi:
    Код (Text):
    1. {$L tasm_module.obj}
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    EvilsInterrupt

    И при чём здесь "дыра в форме"?
     
  6. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    IceStudent

    " - А почему.. "Ы"?

    - Чтоб никто недогадался!"



    Quantum

    Спасибо, за мысли и доброжелательность,Но
    Код (Text):
    1. begin
    2.    hole[1] := $E9;
    3.    hole[2] := ((Length(hole) - 5) shr 0)  and $FF;
    4.    hole[3] := ((Length(hole) - 5) shr 8)  and $FF;
    5.    hole[4] := ((Length(hole) - 5) shr 16) and $FF;
    6.    hole[5] := ((Length(hole) - 5) shr 24) and $FF;


    А вариант с тасмом интересен, но до тебя товарищ подсказал мне довольно хороший метод, за что ему спасибо.