Уроки Iczelion'а



Урок 5. Таблица секций - часть 2


  • Пpочитаем NumberOfSections в IMAGE_FILE_HEADER, чтобы узнать, сколько секций в файле.
  • Используем значение в SizeOfHeaders в качестве файлового смещения таблицы секций и передвинем файловый указатель на это смещение.
  • Проходим по массиву структур, изучая каждый элемент.
  • Просматривая каждую структуру, мы получаем значение PointerToRawData и перемещаем файловый указатель на это смещение. Затем мы читаем значение в SizeOfRawData, чтобы узнать сколько байтов мы должны загрузить в память. Читаем значение в VirtualAddress и добавляем значение к ImageBase, чтобы получить виртуальный адрес секции, с которого ей следует начинаться. И тогда мы готовы промэппировать секцию в память и пометить атрибут памяти согласно флагам, указанным в Characteristics.
  • Идем по массиву, пока все секции не будут обработаны.
  • Заметьте, что мы не используем имя секции: оно не необходимо.

    Пpимеp:

    Этот пример открывает PE-файл и проходит по таблице секций, показывая информацию о секциях в listview-контроле.

    .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\comdlg32.inc include \masm32\include\user32.inc include \masm32\include\comctl32.inc includelib \masm32\lib\comctl32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\comdlg32.lib

    IDD_SECTIONTABLE equ 104 IDC_SECTIONLIST equ 1001

    SEH struct PrevLink dd ? ; адрес предыдущей seh-структуры CurrentHandler dd ? ; адрес нового обработчика исключения SafeOffset dd ? ; смещение с которого безопасно продолжить выполнение программы PrevEsр dd ? ; старое значение esр PrevEbр dd ? ; старое значение ebр SEH ends

    .data AppName db "PE tutorial no.5",0 ofn OPENFILENAME <> FilterString db "Executable Files (*.exe, *.dll)",0,"*.exe;*.dll",0 db "All Files",0,"*.*",0,0 FileOpenError db "Cannot open the file for reading",0 FileOpenMappingError db "Cannot open the file for memory mapping",0 FileMappingError db "Cannot map the file into memory",0 FileInValidPE db "This file is not a valid PE",0 template db "%08lx",0 SectionName db "Section",0 VirtualSize db "V.Size",0 VirtualAddress db "V.Address",0 SizeOfRawData db "Raw Size",0 RawOffset db "Raw Offset",0 Characteristics db "Characteristics",0




    Содержание  Назад  Вперед