РЕДАКТИРОВАТЬ: Это не ответ, я неправильно прочитал вопрос как о поле «Действительный», а не поле «Сортировка», но я оставляю его здесь на случай, если он связан с ответом
Поле «Действительный», о котором вы говорите, описано в Раздел II , § 24.2.6, с соответствующей частью следующим образом:
Поле Valid - это 64-битный битовый вектор, в котором для каждой таблицы, хранящейся в потоке, установлен определенный бит; отображение таблиц на индексы дано в начале §22. Например, когда таблица DeclSecurity присутствует в логических метаданных, бит 0x0e должен быть установлен в допустимом векторе. Недопустимо включать несуществующие таблицы в Valid, поэтому все биты выше 0x2c должны быть равны нулю.
Каждый подраздел раздела 22, начинающийся с §22.2, описывает одну таблицу и дает ее битовый индекс. Например, § 22.2 называется «Сборка: 0x20». Это означает, что, если и только если таблица сборки, описанная в §22.2, присутствует в вашем PE, тогда бит 0x20 должен быть установлен в поле Valid
. Обратите внимание, что это НЕ означает, что Valid & 0x20 == 0x20
, это означает, что должен быть установлен 0x20-й (т. Е. 32-й) бит Valid
, то есть Valid & (1 << 0x20) == (1 << 0x20)
.
Некоторое время я не был уверен, был ли он индексирован 0 или 1, поэтому я предположил 0-индексированный. Но теперь я точно знаю, что он индексируется 0, потому что таблица модулей - это таблица 0x00.