В книге "Undocumented Windows NT" встретил такой код: #define SYSTEMSERVICE(_function) KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_function+1)] Правильно ли я понимаю, что в начале кода каждой функции записан ее номер в таблице?
S_T_A_S_, ну если в начале функции идет такая штука как Код (Text): mov eax,000000ACh int 2eh , то, видимо, можно считать index=ACh номером этой функции в KeServiceDescriptorTable, а уж по адресу KeServiceDescriptorTable+index*04 лежит ее адрес...
MoonShiner физически-то ntdll.dll и ntoskrnl.exe это разные вещи, находятся по разным адресам и в разных кольцах защиты. то есть, в начале функции из ntdll.dll находится номер другой функции из ntoskrnl.exe
В примере в SYSTEMSERVICE передается вдрес функции с префиксом Zw, которая, видимо, из ntdll.dll. А в ntoskrnl.exe такие же названия или другие?
УРА!!! Все работает! Таким способом не нужно знать номер функции. S_T_A_S и MoonShiner большое спасибо за помощь.