Код (Text): __inline ULONG GetSyscallService(ULONG NtDllServiceEntry) { // checking for valid instruction (mov eax, ...) // if (*(PBYTE)((DWORD_PTR)NtDllServiceEntry) != 0xb8) // return -1; return (*(PULONG)((DWORD_PTR)NtDllServiceEntry+1)); } GetSyscallService((ULONG)GetProcAddress(GetModuleHandle("ntdll"),"NtQueryDirectoryFile")); возвращает номер сервиса, передаешь адрес ф-ии в ntdll только. юзай
Всем спасибо. Пролема была в том, что Builder не понимал инструкцию "call", поэтому я пытался делать без данной инструкции, что приводило к неправильному результату. Пришлось на Visual Studio сделать DLL, и экспортировать оттуда функцию: Код (Text): #define sysenter __asm _emit 0x0F __asm _emit 0x34 #define EXPORT extern "C" __declspec(dllexport) EXPORT LONG XpSystemCallZwQuerySystemInformation(UINT uiInfoType, PVOID pvBuffer, ULONG ulBufferSize, PULONG pulReturn); LONG XpSystemCallZwQuerySystemInformation(UINT uiInfoType, PVOID pvBuffer, ULONG ulBufferSize, PULONG pulReturn) { __asm { pop ebp mov eax, 0x00AD call Sys ret 0x10 Sys: mov edx, esp sysenter } } Через одно место конечно, но зато результат получен. Тема закрыта. Всем еще раз спасиб!
когда я начинал писать - твоего поста не было) у меня висела открытой эта страница около часа, потом я отписал пост) а оказалось ты уже за это время успел ответить туц туц