> Еще файлик nt4.h - хедер для нативных структур и функций, > ну и куча всего по мелочам (Object Manager, Memory Manager, > File System etc.) > structures.txt - только структуры и т.д. пришли если можешь
> ЗЫ: Все что там описано нужно делать из UserMode. В кернел > моде в fs находится селектор 0x30 и указывает на текущий > KPCR - kernel processor control region, но с ним совсем > другая история на основе твоих описаний все заработало и причем именно так как хотел я -
только пришлось повозиться =))
большое спасибо
ЗЫ:если пожелаешь я тебе мыльну сырец - поглядишь
кстати вот линк на прогу
структура имеет следующий вид:
typedef struct _PROCESS_ENVIRONMENT_BLOCK
{
DWORD AllocationSize;
DWORD unknown2;
void *pImage;
PVOID handles;
PPROCESS_PARAMETRS pi;
PPROCESS_PARAMETRS
HANDLE hHeap;
DWORD lock;
void *ack_lock;
void *rel_lock;
DWORD *lock_cnt;
void *user_cb;
HANDLE *heaps;
//CRITICAL_SECTION *cs;
void *cs;
DWORD ver;
} PROCESS_ENVIRONMENT_BLOCK, *PPROCESS_ENVIRONMENT_BLOCK;
параметр handles указывает на список dll-модулей(описатель,имя,полный путь и т.д.), загруженных процессом.
вопрос:какой формат имеет элемент этого списка?
никак не могу под отладчиком определить =((
А где ты такой PEB нарыл?15.11.02 18:26 Автор: amirul <Serge> Статус: The Elderman
> структура имеет следующий вид: > typedef struct _PROCESS_ENVIRONMENT_BLOCK > { [skipped]
> } PROCESS_ENVIRONMENT_BLOCK, *PPROCESS_ENVIRONMENT_BLOCK; Собственно subj
По моим данным PEB выглядит так:
> параметр handles указывает на список > dll-модулей(описатель,имя,полный путь и т.д.), загруженных > процессом. > вопрос:какой формат имеет элемент этого списка? > никак не могу под отладчиком определить =((
Теперь, ежели ты хочешь получить список (LIST_ENTRY *) модулей, нужно делать так:
1. По адресу fs:0x18 - взять TEB * (в user-mode, то бишь fs==0x3b)
2. В этой структуре взять ->Peb (по смещению 0x30)
Вообще-то PEB в NT-ях всегда отмаплен по адресу 0x7ffdf000 и занимает всю страницу. Под ним (0x7ffde000, 0x7ffdd000 ...) находятся TEB-ы 0-го, 1-го и т.д. потоков процессы. Но правильно делать именно так как написано
3. Из PPEB-а взять Ldr типа PPEB_LDR_DATA
4. Взять из него InLoadOrderModuleList.Flink
Это указатель на LIST_ENTRY InLoadOrderModuleList в структуре LDR_MODULE первого модуля (собственно экзешника этого процесса чаще всего). Все остальные InLoadOrderModuleList связаны (смотри макрос CONTAINING_RECORD)
Да несколько лет в инете собирал доки и сырцы по интерналсам винды. Вернее не собирал, а качал все что имеет к этому хоть какое-то отношение, даже если сейчас мне не нужно.
Очень хорошая штука в этом плане - reactos (reactos.org по мойму). Те структуры, что я отпостил - оттуда
Еще файлик nt4.h - хедер для нативных структур и функций, ну и куча всего по мелочам (Object Manager, Memory Manager, File System etc.)
structures.txt - только структуры и т.д.
Линки дать не могу - не помню
ЗЫ: Все что там описано нужно делать из UserMode. В кернел моде в fs находится селектор 0x30 и указывает на текущий KPCR - kernel processor control region, но с ним совсем другая история
[NT] пришлось заставить работать =))23.11.02 01:07 Автор: beetle <beetle> Статус: Member
> Еще файлик nt4.h - хедер для нативных структур и функций, > ну и куча всего по мелочам (Object Manager, Memory Manager, > File System etc.) > structures.txt - только структуры и т.д. пришли если можешь
> ЗЫ: Все что там описано нужно делать из UserMode. В кернел > моде в fs находится селектор 0x30 и указывает на текущий > KPCR - kernel processor control region, но с ним совсем > другая история на основе твоих описаний все заработало и причем именно так как хотел я -
только пришлось повозиться =))
большое спасибо
ЗЫ:если пожелаешь я тебе мыльну сырец - поглядишь
кстати вот линк на прогу
> > Еще файлик nt4.h - хедер для нативных структур и > функций, > > ну и куча всего по мелочам (Object Manager, Memory > Manager, > > File System etc.) > > structures.txt - только структуры и т.д.
> пришли если можешь
Ушло мылом
Уточнение15.11.02 18:34 Автор: amirul <Serge> Статус: The Elderman
> Вообще-то PEB в NT-ях всегда отмаплен по адресу 0x7ffdf000 > и занимает всю страницу. Под ним (0x7ffde000, 0x7ffdd000 > ...) находятся TEB-ы 0-го, 1-го и т.д. потоков процессы. Здесь я не совсем уверен насчет размера (может и не страница), но общий принцип именно такой. Хотя вроде самое логичное - выделить именно страницу
> #include <winnt.h> // Та которая в NTDDK > > void > main() { > PTEB pTeb; > PPEB pPeb; > PPEB_LDR_DATA pLdrData; > PLIST_ENTRY pCurrentEntry; > PLDR_MODULE pModule; > > __asm { > mov pTeb, fs:0x18 > } > pPeb = pTeb->Peb; > pLdrData = pPeb->Ldr; > pCurrentEntry = InLoadOrderModuleList.Flink; > while (pCurrentEntry != > &Peb->Ldr->InLoadOrderModuleList && pCurrentEntry != > NULL) { > pModule = CONTAINING_RECORD(pCurrentEntry, LDR_MODULE, > InLoadOrderModuleList); > > // Использование pModule > pCurrentEntry = pCurrentEntry->Flink; > } > --- Прогу не тестил. Просто для примера - она даже не была ни в одном development environmente - набирал прямо в багтраковской форме