Доброго времени суток, уважаемые. Столкнулся со следующей проблемой. Имеется код: Код (Text): NtQuerySystemInformation(SystemModuleInformation, pModules, 4, &dwNeededSize); pModules = (PMODULES)GlobalAlloc(GPTR, dwNeededSize); NtQuerySystemInformation(SystemModuleInformation, pModules, dwNeededSize, NULL); DWORD dwKernelBase = (DWORD)pModules->smi.Base; PCHAR pKernelName = pModules->smi.ModuleNameOffset+pModules->smi.ImageName; пытаюсь сделать то же самое на асме: Код (Text): SYSTEM_MODULE_INFORMATION STRUCT ReservedDWORD 2 dup (?) BaseDWORD ? _SizeDWORD ? FlagsDWORD ? IndexDWORD ? UnknownDWORD ? LoadCountDWORD ? ModuleNameOffsetDWORD ? ImageNameBYTE 256 dup (?) SYSTEM_MODULE_INFORMATION ENDS read_sst proc pSST : DWORD LOCAL dwSize : DWORD LOCAL dwBase : DWORD LOCAL szName : DWORD LOCAL Modules : SYSTEM_MODULE_INFORMATION lea eax, dwSize lea edx, Modules push eax push 4 push edx push 11; SystemModuleInformation call NtQuerySystemInformation sub eax, 0C0000004h; STATUS_INFO_LENGTH_MISMATCH jnz _error push PAGE_READWRITE push MEM_COMMIT + MEM_RESERVE push dwSize push 0 call VirtualAlloc test eax, eax jz _error mov edx, eax push 0 push dwSize push edx push 11; SystemModuleInformation call NtQuerySystemInformation test eax, eax jnz _error lea ebx, Modules.ImageName add ebx, Modules.ModuleNameOffset mov szName, ebx _error: ret read_sst endp в итоге в szName получаю неизвестно что вместо имени. в чем может быть проблема? Спасибо за внимание.
немного переделал код: Код (Text): SYSTEM_MODULE_INFORMATION STRUCT Reserved DWORD 2 dup (?) Base DWORD ? _Size DWORD ? Flags DWORD ? Index DWORD ? Unknown DWORD ? LoadCount DWORD ? ModuleNameOffset DWORD ? ImageName BYTE 256 dup (?) SYSTEM_MODULE_INFORMATION ENDS MODULES STRUCT dwNumberOfModules DWORD ? _SMI SYSTEM_MODULE_INFORMATION <> MODULES ENDS ... read_sst proc pSST : DWORD LOCAL dwSize : DWORD LOCAL dwBase : DWORD LOCAL szName : DWORD lea eax, dwSize assume edx : ptr MODULES push eax push 4 push edx push 11 ; SystemModuleInformation call NtQuerySystemInformation sub eax, 0C0000004h ; STATUS_INFO_LENGTH_MISMATCH jnz _error push PAGE_READWRITE push MEM_COMMIT + MEM_RESERVE push dwSize push 0 call VirtualAlloc test eax, eax jz _error mov edx, eax push 0 push dwSize push edx push 11 ; SystemModuleInformation call NtQuerySystemInformation test eax, eax jnz _error mov eax, [edx]._SMI.Base mov dwBase, eax lea esi, [edx]._SMI.ImageName mov edi, [edx]._SMI.ModuleNameOffset add edi, esi mov szName, edi _error: ret read_sst endp [edx]._SMI.Base = 90909090h <- это правильно? в szName не получает имя... в чем же проблема заключается?