Уроки Iczelion'а



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


invoke RtlZeroMemory,addr buffer,9 invoke lstrcpyn,addr buffer,addr [esi].Name1,8 lea eax,buffer mov lvi.pszText,eax

Мы отобразим имя секции, но перед этим мы должны отконвертировать его в ASCIIZ-строку.

invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_INSERTITEM,0,addr lvi

Затем мы отобразим его в первой колонке.

Мы продолжаем действовать по этой схеме, пока не выведем последнее значение. Тогда мы должны переходить к следующей структуре.

dec edi add esi, sizeof IMAGE_SECTION_HEADER .endw

Мы понижаем значение в edi после обработки каждой из секций. И добавляем размер IMAGE_SECTION_HEADER к esi, что он содержал адрес следующей структуры IMAGE_SECTION_HEADER.

Вот, что необходимо сделать, чтобы обработать таблицу секций:

  • Убедиться, что файл является верным PE.
  • Перейти к началу PE-заголовка.
  • Получить количество секций из поля NumberOfSections в файловом заголовке.
  • Перейти к таблице секций либо добавив ImageBase к SizeOfHeaders или добавив адрес PE-заголовка к размеру DOS-заголовка (таблица секций идет непосредственно за PE-заголовком). Если вы не хотите использовать file maрing, вам нужно переместить файловый указатель на таблицу секций посредством SetFilePointer. Файловое смещение таблицы секций находится в SizeOfHeaders (это один из параметров IMAGE_OPTIONAL_HEADER).
  • Обработать каждую структуру IMAGE_SECTION_HEADER.

[C] Iczelion, пер. Aquila.






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