Занимаюсь анализом Elf-файлов. Возник вопрос по таблице программного заголовка. По смещению 0x1C в ELF-заголовке указано смещение где начинается эта таблица. Далее по смещению 0x2A указан размер одной записи в этой таблице(обычно 32 байта), а по смещению 0x2C количество этих записей в таблице. Первые 4 байта каждой из записей таблицы указывают на тип секции. Судя по документации они могу принимать такие значения:
file.seek(phOffset + 0x00);
file.read((char*)&programHeader.p_type, sizeof(int));
switch(programHeader.p_type)
{
case 0: return "Record ignored";
break;
case 1: return "Loadable Segment";
break;
case 2: return "Dynamic Section";
break;
case 3: return "Program Interpreter";
break;
case 4: return "Notes";
break;
case 5: return "Element of this type do not conform to the ABI";
break;
case 6: return "Specifies the location and size of the program header table itself (in file and in memory image of program)";
break;
case 0x60000000: return "Values in this inclusive range are reserved for OS-specific semantics.";
break;
case 0x6fffffff: return "Values in this inclusive range are reserved for OS-specific semantics.";
break;
case 0x70000000: return "Values in this inclusive range are reserved for processor-specific semantics.";
break;
case 0x7fffffff: return "Values in this inclusive range are reserved for processor-specific semantics.";
break;
default: return "Unknown";
}
В одном из файлов, судя по числу по смещению 0x2C, 9 записей в таблице программного заголовка. Но смотря все 9 записей тип секций определяется только у первых 6 секций. Шестая имеет тип notes. У остальных трех записей в начале стоит число, которых нет в документации. А именно 50E5, 51E5, 52E5. То есть в свитче срабатывает default. Что это? Я неправильно определяю количество записей в таблице программного заголовка или эти числа тоже имеют свое значение?
Вообще есть проверенные анализаторы, чтобы я мог сверить с ними и проверить адекватность данных, выдаваемых моей программой?