Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > модификация кода в момент исполнения программы


Автор: Lonley 15.10.2007, 08:33
Привет всем!!!
----------------------------
Код

    asm
      mov esi,h
      mov edi,d
      mov eax,[esi]
      cmp eax,'1ARI'
      jz @first      //--  1 if sign first buff IRA1   
..............................................................................
      mov ecx,s1   // size of the transfer data
      cld          // flag of a direction
  rep movsb        // go...

      lea eax,@jmp1                      //вот тут------------------------------------>
      mov [eax],word ptr $01eb    //вот тут------------------------------------>

@jmp: dw $01EB      //jmp @second or @end_   

@second:
      mov esi,d
..............................................................................
      cld
  rep movsb

@jmp1: dw $e4eb      //--jmp1   @first -1c  ..сюдаа------------------------------->>>>>

@error:
      mov ebx,ebx
      xor eax,eax
@end_:
      mov ebx,ebx   //----------->end
      xor eax,eax
    end;

я пытаюсь изменить свой собственный код в момент выполнения программы путем
записи в память по адресу ичполняемого кода..., но возникает исключение как только 
происходит запись программа прерывается, а исполнение продолжается в библиотеки
NTDLL.DLL -> ReizeException что-то вроде

в DOS у меня такие фишки проходили на раз

тут я так понял не хватает привилегий 

каков выход

Автор: Alexeis 15.10.2007, 09:01
Lonley, в сегмент кода нельзя писать просто так указав адрес, так же как исполнять команды в сегменте данных. На сколько мне известно можно писать и исполнять код напрямую только в стеке.

Автор: Lonley 15.10.2007, 09:37
т.е. сама винда не дает ... или все-таки есть обход кроме стека
-------------------------------------------
кроме 0 кольца... нужно из 3 
--------------------------------------------
хотелось бы поточнее

Автор: dumb 15.10.2007, 15:41
Код

var
  oldprot: Dword;
...
asm
...
      lea eax,@jmp1
      lea edx,oldprot
      push edx
      push PAGE_EXECUTE_READWRITE
      push $100
      push eax
      call VirtualProtect
      lea eax,@jmp1
      mov word ptr [eax],$01eb
...

Автор: Lonley 15.10.2007, 15:58
dumb, 
как на счет XP SP2 проверял нет
в доке сказано что под 95ВИН работает корр, а в XP SP2
---------
спасибо за функцию

Автор: W4FhLF 16.10.2007, 10:05
Обнови доки.

Rehttp://msdn2.microsoft.com/en-us/library/aa366898.aspx

Автор: Lonley 16.10.2007, 10:27
всем спасибо я попробовал все работает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)