
18.05.2008, 00:43
|
|
Познавший АНТИЧАТ
Регистрация: 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 ; Очищаем стек
|
|
|