Я пытаюсь написать код C, который будет вычислять размер файла дампа ядра Linux на основе его заголовка ELF. Это необходимо, так как я получаю его в STDIN и ему нужно его передать, указав его размер сначала, не записывая его в файл. Чтение всего файла в память также не является вариантом.Вычисление размера файла ядра linux из заголовков
Прежде всего, я ищу в заголовок дампа памяти:
ELF Header:
Magic: 7f 45 4c 46 02 02 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, big endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: CORE (Core file)
Machine: MIPS R3000
Version: 0x1
Entry point address: 0x0
Start of program headers: 64 (bytes into file)
Start of section headers: 0 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 257
Size of section headers: 0 (bytes)
Number of section headers: 0
Section header string table index: 0
There are no sections in this file.
There are no sections to group in this file.
Далее я читаю заголовки программ в цикле и принимая сумму всех полей FileSiz. Мое предположение состояло в том, что (размер заголовка ELF) + (размер заголовка программы) * (количество заголовков программ) + (сумма всех размеров сортировки) даст мне общий размер файла. Однако, это не так. В моем случае я получаю фактический файл размером 729088000 байт, в то время как приведенная выше математика дает мне 729054616 байт. Что мне не хватает?
Этот ответ полностью * неправильный, и предпосылка вопроса ложна. –