Показать сообщение отдельно

  #50  
Старый 18.05.2008, 00:43
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 3349


По умолчанию

Довольно интерестный способ вызова API функций. Очень удобен в случаях низко уровнего программирования или в тех местах где очень важен размер.
Многие API функции из kernel32.dll имеют аналоги в ntdll которые в свою очередь это лишь только оболочка над ядерными функциияви вызываемыми через SYSENTER
Вот примера вызова определенной функции напрямую через SYSENTER => нам даже не нужен импорт. Разви что зависимость от операционной системы.
Данный пример - аналог функции VirtualProtect для XP
Код:
 
 push _start	  ; адрес начала блока
 mov eax,esp	  ; eax = Pstart_block
 push 100	  ; длинна блока
 mov edx,esp	  ; edx = Plength_block
 push esp	  ; для нас не важно
 push 4 	  ; новые права доступа
 push edx	  ; Plength_block
 push eax	  ; Pstart_block
 push -1	  ; говорит что это наш процес
 xor eax,eax	  ;
 mov al,89h	  ; eax=89h => NtProtectVirtualMemory для XP
 push eax	  ; в нашем случае не важно что тут
 push @m1	  ; куда попадем после SYSENTER
 mov edx, esp	  ; нуна для SYSENTER
 sysenter
@m1:
 add esp,20h	  ; Очищаем стек
 
Ответить с цитированием