У меня есть следующий вывод strace, который я просматриваю, чтобы немного больше узнать о потоке программ. Вот раздел, который меня смущает:
16:08:02 open("/lib/libncurses.so.5", O_RDONLY) = 3 <0.000046>
16:08:02 read(3, "\x7f\"..., 512) = 512 <0.000048>
16:08:02 fstat64(3, {st_dev=makedev(202, 0), st_ino=16548, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=464, st_size=231576, st_atime=2011/02/06-15:37:43, st_mtime=2011/01/04-06:05:23, st_ctime=2011/02/06-15:37:43}) = 0 <0.000038>
Что дает чтение первых 512 байт? Похоже, этот шаблон распространен для общих библиотек.
ОБНОВЛЕНИЕ: я только что получил отличный ответ на этом уточняется длина 512 байт. В частности, из комментария в elf / dl-load.c:
32-битные файлы заголовка ELF имеют длину 52 байта, а в 64-битных файлах - 64 байта. Каждая запись заголовка программы снова имеет длину 32 и 56 байтов соответственно. То есть, даже с файлом, который имеет 10 записей заголовка программы, нам нужно прочитать только 372B / 624B соответственно. Добавьте к этому небольшой запас для примечаний к программе, и достаточно чтения 512B и 832B для 32-битных и 64-битных файлов соответственно.
Первые 512 байтов содержат заголовок, необходимый для определения типа файла, целевой платформы, версии и т. Д. После чтения заголовка код переходит к обработчику этого конкретного типа файла.