Исправлены ли имена каталогов данных COFF? - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть PE-файл (блокнот), значение NumberOfRvaAndSize в заголовке COFF 0x10, и, как ожидается, 16 DataDirectory записей.

Документация говорит, что это значение может измениться (хотя я никогда не видел его), что означает, что их было больше 16 записей.

Сразу после того, как список из 16 каталогов данных завершен именами.

  1. Являются ли эти имена всегда одинаковыми, в том же порядке?
  2. Если их меньше, то всегда будут те каталоги в конце, которые будут отсутствовать?
  3. Если их больше 16, каким именам они присвоены?

1 Ответ

0 голосов
/ 25 сентября 2018

Это всегда вопрос спецификации против реализации.

Являются ли эти имена всегда одинаковыми, в том же порядке?

Что касается имен (Iугадаете, вы имеете в виду названия разделов?), нет, они могут измениться.Вы можете называть их как угодно, хотя большинство реализаций (например, компоновщики) сохранят имена спецификаций (например, .reloc для перемещений).

Порядок фиксирован;Вы можете ссылаться на них по их номерам .

Если их будет меньше, всегда ли будут отсутствующие каталоги в конце, которые будут отсутствовать?

Я не уверен, что действительный PE (который может быть загружен реально поддерживаемой системой) может иметь менее 16 каталогов данных.Это может быть возможно, поскольку расположение заголовков разделов, вероятно, рассчитывается с использованием FILE_HEADER.SizeOfOptionalHeader.

Эталонная реализация для загрузки PE-файла (Windows Loader) не является открытым исходным кодом, поэтому ответить на этот вопрос нелегко.

Я предполагаю, что может работать: это все равно, что пытаться загрузить win2K PE в системе Windows 10 (учитывая, что он импортирует функции, которые все еще присутствуют в системе Windows 10),Это как если бы каталог данных CLR просто не существовал.

Если их больше 16, каким именам они присвоены?

У вас не может быть большечем 16 каталогов данных, потому что максимальное число равно 16. Я почти уверен, что загрузчик Windows не загрузит PE-файл с более чем 16 каталогами данных.

В документации говоритсячто это значение может измениться (хотя я никогда не видел его), что означало бы, что было больше, чем менее 16 записей.

Число сейчас установлено равным 16.Например, последним дополнением был каталог данных CLR, который был добавлен для загрузки CLR с введением .NET.До этого число было 15, так что да, значение может меняться и не всегда будет 16, но это не значит, что оно меняется между PE.Я имею в виду, что в данный момент для поддерживаемой системы все PE будут иметь одинаковое количество каталогов данных.

Я предполагаю, что во время введения .NET (сКаталог данных CLR) были PE с 15 каталогами данных и другие с 16. Вероятно, был исправлен загрузчик windows, чтобы учесть два разных числа.В настоящее время вероятно, что число установлено только 16.

...