Сама структура struct _PEB_LDR_DATA есть в ntoskrnl.pdb, ntdll.pdb и т.д. Но где искать описание структур: struct _LIST_ENTRY InLoadOrderModuleList; struct _LIST_ENTRY InMemoryOrderModuleList; struct _LIST_ENTRY InInitializationOrderModuleList; google приводит к typedef struct _LDR_MODULE { LIST_ENTRY InLoadOrderModuleList; LIST_ENTRY InMemoryOrderModuleList; LIST_ENTRY InInitializationOrderModuleList; PVOID BaseAddress; PVOID EntryPoint; ULONG SizeOfImage; UNICODE_STRING FullDllName; UNICODE_STRING BaseDllName; ULONG Flags; SHORT LoadCount; SHORT TlsIndex; LIST_ENTRY HashTableEntry; ULONG TimeDateStamp; } Вопрос где (*.pdb или *.h) найти описания структур struct _LIST_ENTRY InLoadOrderModuleList и соседей.
winnt.h Код (Text): // // Doubly linked list structure. Can be used as either a list head, or // as link words. // typedef struct _LIST_ENTRY { struct _LIST_ENTRY *Flink; struct _LIST_ENTRY *Blink; } LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY;
немного поискал и нашел вот что: _PEB_LDR_DATA содержит 3 вышеозначенных идентификатора InLoadOrderModuleList, InMemoryOrderModuleList, InInitializationOrderModuleList имеющих тип LIST_ENTRY, так вот Flink и Blink каждой указывает на структуру LDR_MODULE, а используются они для сортировки по 3 критериям соответственно "порядок загрузки" "порядок в памяти" "порядок инициализации"
Описание структуры struct _LIST_ENTRY { /*<thisrel this+0x0>*/ /*|0x4|*/ struct _LIST_ENTRY* Flink; /*<thisrel this+0x4>*/ /*|0x4|*/ struct _LIST_ENTRY* Blink; }; есть в том же ntoskrnl.pdb. Где *Flink и *Blink это (я так думаю) указатели на начало структур InLoadOrderModuleList, InMemoryOrderModuleList, InInitializationOrderModuleList Вопрос: Где найти описание этих структур. Откуда взято что они соответствуют структуре struct _LDR_MODULE?
не, ненужно хранить конец структуры , InLoadOrderModuleList, InMemoryOrderModuleList, InInitializationOrderModuleList и есть структуры LIST_ENTRY, их *Flink и *Blink хранят указатели на начало структур LDR_MODULE. И LDR_MODULE в свою очередь тоже имеет InLoadOrderModuleList, InMemoryOrderModuleList, InInitializationOrderModuleList, *Flink и *Blink которых хранит указатель на следующую и предыдущую LDR_MODULE и т.д., вроде так
Похоже ясности нет Тогда может кто-нибудь знает откуда взялось описание структуры _LDR_MODULE: typedef struct _LDR_MODULE { LIST_ENTRY InLoadOrderModuleList; LIST_ENTRY InMemoryOrderModuleList; LIST_ENTRY InInitializationOrderModuleList; PVOID BaseAddress; PVOID EntryPoint; ULONG SizeOfImage; UNICODE_STRING FullDllName; UNICODE_STRING BaseDllName; ULONG Flags; SHORT LoadCount; SHORT TlsIndex; LIST_ENTRY HashTableEntry; ULONG TimeDateStamp; } Из какого *.pdb или *.h
вычитал что структура LDR_MODULE недокументирована, и это ее ошибочное название, правильное LDR_DATA_TABLE_ENTRY. По самому вопросу скажу неясность у вас из за недостатка знаний о языке
defaultplayer "По самому вопросу скажу неясность у вас из за недостатка знаний о языке" Согласен, подскажите где пробелы. А структура LDR_DATA_TABLE_ENTRY описана в ntdll.pdb
defaultplayer интересный вопрос, но пока внятного и четкого, при этом исчерпываеющего ответа не увидел!
пробелы с типами данных и объвлении переменных вот хорошая литература http://www.opu.odessa.ua/lib/up/c/h12.htm#121
defaultplayer Нее, тут у человека вопрос не в типах, а в том что как ты говоришь оригинал LDR_DATA_TABLE_ENTRY, а тут в символьной информация не какая-нить _LDR_DATA_TABLE_ENTRY* или что-то вроде этого, а _LIST_ENTRY* , да к тому же народ откуда-то взял LDR_MODULE. Вот и вопрос, раз ты говоришь что оригинальное название LDR_DATA_TABLE_ENTRY, то тоже это должен где-то увидеть, прочитать,понять,догадаться или еще что-то, что привело тебя к этому знанию! Вот что привело тебя к этому знанию ? Как ты понял что LDR_DATA_TABLE_ENTRY это оригинальное назвние ? ) т.е. вопрос автора заключается в следующем смысле: "Как можно пить водку так, чтобы вместо LIST_ENTRY увидеть LDR_DATA_TABLE_ENTRY ?"
EvilsInterrupt если честно, я понял только вот этот ваш вопрос прочитал здесь на васме в одной из статей