Путеводитель по написанию вирусов под Win32


IMAGE_OPTIONAL_HEADER - часть 3


NATIVE 1 Не требует подсистемы (например драйвер устройства) WINDOWS_GUI 2 Выполняется в подсистеме Windows GUI WINDOWS_CUI 3 Выполняется в символьной подсистеме Windows (консольное приложение) OS2_CUI 5 Выполняется в символьной подсистеме OS/2 (только OS/2 1.x) POSIX_CUI 7 Выполняется в символьной подсистеме Posix

¤ Характеристики DLL:

Набор флагов, задающий при каких условиях будет вызываться функция инициализации DLL (например DLLMain). Похоже, что это значение всегда равно 0, тем не менее операционная система вызывает инициализацию DLL для всех 4-х событий.

1 Вызывать инициализацию, когда DLL впервые загружается в адресное пространство процесса 2 Вызывать инициализацию, когда тред завершает работу 4 Вызывать инициализацию, когда тред начинает работу 8 Вызывать инициализацию, когда DLL завершает свою работу

¤ Размер зарезервированного стека:

Количество виртуальной памяти, резервируемой для начального стека треда. Тем не менее, не вся эта память выделяется (смотри следующее поле). Это поле по умолчанию равно 0x100000. Если вы укажете 0 в качестве размера стека при создании треда функцией CreateThread, именно столько будет занимать стек нового треда.

¤ Размер выделенного стека:

Количество памяти, выделяемой для начального стека треда. Это поле по умолчанию равно 0x1000 (1 страница) у Microsoft Linker, в то время как TLINK32 делает это поле равным двум страницам.

¤ Размер зарезервированной кучи:

Количество виртуальной памяти, которое необходимо зарезервировать для начальной кучи процесса. Этот хэндл кучи можно получить, вызывав GetProcessHeap. Нет вся эта память выделяется (смотри следующее поле).

¤ Размер выделенной кучи:

Количество памяти, изначально выделяемой для кучи процесса. По умолчанию - одна страница.

¤ Флаги загрузчика:

Согласно WINNT.H эти поля относятся к поддержке отладки. Я никогда не видел экзешника с установленными битами этого поля, да и как заставить линкер их установить не совсем понятно.

1. Вызвать инструкцию точки прерывания перед запуском процесса 2. Вызвать отладчик после того, как процесс будет загружен в память

¤ Number Of Rva And Sizes:

Количество элементов в массиве DataDirectory (ниже). Современные компиляторы всегда устанавливает это поле равным 16.




Начало  Назад  Вперед



Книжный магазин