Executable and Linkable Format

(перенаправлено с «ELF»)

ELF (англ. Executable and Linking Format — формат исполнимых и компонуемых файлов) — формат исполняемых двоичных файлов, используемый во многих современных UNIX-подобных операционных системах, таких как FreeBSD, Linux, Solaris и др.

ELF
Расширение.без расширения; .axf, .bin, .elf, .o, .out, .prx, .puff, .ko, .mod, .so
Сигнатура7f 45 4c 46
РазработчикUnix System Laboratories
Тип форматадвоичный, исполняемый, объектный, динамическая библиотека, дамп памяти

История править

Стандарт формата ELF изначально был разработан и опубликован компанией USL как часть двоичного интерфейса приложений операционной системы UNIX System V[1]. Затем он был выбран комитетом TIS и развит в качестве переносимого формата для различных операционных систем, работающих на 32-разрядной аппаратной архитектуре Intel x86.[2] ELF быстро набрал популярность и, после того как компания HP расширила формат и опубликовала стандарт ELF-64, распространился и на 64-разрядных платформах.[3]

Типы править

Стандарт формата ELF различает несколько типов файлов:

  • Перемещаемый файл — хранит инструкции и данные, которые могут быть связаны с другими объектными файлами. Результатом такой связи может быть совместно используемый объектный файл или исполняемый файл. К этому типу относятся объектные файлы статических библиотек.
  • Совместно используемый объектный файл — также содержит инструкции и данные и может быть связан с другими перемещаемыми файлами и совместно используемыми объектными файлами, в результате чего будет создан новый объектный файл, либо при запуске программы на выполнение операционная система может динамически связать его с исполняемым файлом программы, в результате чего будет создан исполняемый образ программы. В последнем случае речь идет о совместно используемых библиотеках.
  • Исполняемый файл — содержит полное описание, позволяющее системе создать образ процесса. В том числе: инструкции, данные, описание необходимых совместно используемых объектных файлов и необходимую символьную и отладочную информацию.

Формат править

Каждый ELF файл состоит из следующих частей:

Заголовок файла править

Заголовок файла (ELF Header) имеет фиксированное расположение в начале файла и содержит общее описание структуры файла и его основные характеристики, такие как: тип, версия формата, архитектура процессора, виртуальный адрес точки входа, размеры и смещения остальных частей файла. Заголовок имеет размер 52 байта для 32-битных файлов или 64 для 64-битных. Данное различие обуславливается тем, что в заголовке файла содержится три поля, имеющих размер указателя, который составляет 4 и 8 байт для 32- и 64-битных процессоров соответственно. Такими полями являются e_entry, e_phoff и e_shoff.

Поля заголовка файла ELF
РазмерНазваниеНазначение
ELF

32

ELF

64

16
e_ident[16]Общая характеристика файла.
Байты массива e_ident
ИндексНазваниеНазначение
0 - 3
EI_MAG0 - EI_MAG3Сигнатура файла: 0x7f 0x45 0x4c 0x46.
4
EI_CLASSКласс объектного файла.
НазваниеЗначениеОписание
ELFCLASSNONE0Некорректный класс
ELFCLASS32132-битный объектный файл
ELFCLASS64264-битный объектный файл
5
EI_DATAЗависимый от процессора метод кодирования данных.
НазваниеЗначениеОписание
ELFDATANONE0Некорректный тип
ELFDATA2LSB1Little Endian
ELFDATA2MSB2Big Endian
6
EI_VERSIONВерсия ELF заголовка. В настоящее время значение данного байта должно быть EV_CURRENT.
НазваниеЗначение
EV_CURRENT1
7
EI_OSABIСпецифичные для операционной системы или ABI расширения, используемые в файле. У некоторых полей в других структурах ELF файла имеются флаги и поля, значение которых зависит от операционной системы или ABI; интерпретация этих полей определяется значением данного байта. Если объектный файл не использует расширений, рекомендуется, чтобы этот байт был установлен в 0. Если значение для этого байта находится в диапазоне от 64 до 255, то его интерпретация зависит от значения поля e_machine ELF заголовка. В этом диапазоне каждая архитектура может определить свой набор значений.
НазваниеЗначениеОписание
ELFOSABI_NONE0UNIX System V ABI
ELFOSABI_HPUX1HP-UX
ELFOSABI_NETBSD2NetBSD
ELFOSABI_GNU3Файл использует расширения GNU ELF (GNU/Linux)
ELFOSABI_SOLARIS6Solaris
ELFOSABI_AIX7AIX
ELFOSABI_IRIX8IRIX
ELFOSABI_FREEBSD9FreeBSD
ELFOSABI_TRU6410Tru64 UNIX
ELFOSABI_MODESTO11Modesto
ELFOSABI_OPENBSD12OpenBSD
ELFOSABI_OPENVMS13OpenVMS
ELFOSABI_NSK14Non-Stop Kernel
ELFOSABI_AROS15Amiga Research OS
ELFOSABI_FENIXOS16FenixOS
ELFOSABI_CLOUDABI17CloudABI
ELFOSABI_OPENVOS18OpenVOS
64 - 255Зависимые от процессора значения
8
EI_ABIVERSIONВерсия ABI.
9
EI_PADТ. н. padding bytes (байты заполнения). Зарезервированные для будущего использования элементы массива e_ident. Обычно устанавливаются в 0. Программы для чтения объектных файлов должны игнорировать их.
10
EI_PAD + 1
11
EI_PAD + 2
12
EI_PAD + 3
13
EI_PAD + 4
14
EI_PAD + 5
15
EI_PAD + 6
2
e_typeТип файла.
НазваниеЗначениеОписание
ET_NONE0Неопределённый
ET_REL1Перемещаемый файл
ET_EXEC2Исполняемый файл
ET_DYN3Совместно используемый объектный файл
ET_CORE4Core file
ET_LOOS - ET_HIOS65024 - 65279Зависимые от операционной системы значения
ET_LOPROC - ET_HIPROC65280 - 65535Зависимые от процессора значения
2
e_machineАрхитектура аппаратной платформы, для которой файл создан:
НазваниеЗначениеОписание
EM_NONE0x0Неопределено
EM_M320x01AT&T WE 32100
EM_SPARC0x02SPARC
EM_3860x03Intel 80386
EM_68K0x04Motorola 68000 (M68k)
EM_88K0x05Motorola 88000 (M88k)
EM_IAMCU0x06Intel MCU
EM_8600x07Intel 80860
EM_MIPS0x08MIPS
EM_S3700x09IBM_System/370
EM_MIPS_RS3_LE0x0AMIPS R3000 Little-endian
0x0B - 0x0EReserved for future use
EM_PARISC0x0FHewlett-Packard PA-RISC
0x10Reserved for future use
EM_9600x13Intel 80960
EM_PPC0x14PowerPC
EM_PPC640x15PowerPC (64-bit)
EM_S3900x16S390, including S390x
EM_SPU0x17IBM SPU/SPC
0x18 - 0x23Reserved for future use
EM_V8000x24NEC V800
EM_FR200x25Fujitsu FR20
EM_RH320x26TRW RH-32
EM_MCORE и EM_RCE0x27Motorola RCE
EM_ARM0x28ARM (up to ARMv7/Aarch32)
EM_OLD_ALPHA0x29Digital Alpha
EM_SH0x2ASuperH
EM_SPARCV90x2BSPARC Version 9
EM_TRICORE0x2CSiemens TriCore embedded processor
EM_ARC0x2DArgonaut RISC Core
EM_H8_3000x2EHitachi H8/300
EM_H8_300H0x2FHitachi H8/300H
EM_H8S0x30Hitachi H8S
EM_H8_5000x31Hitachi H8/500
EM_IA_640x32IA-64
EM_MIPS_X0x33Stanford MIPS-X
EM_COLDFIRE0x34Motorola ColdFire
EM_68HC120x35Motorola M68HC12
EM_MMA0x36Fujitsu MMA Multimedia Accelerator
EM_PCP0x37Siemens PCP
EM_NCPU0x38Sony nCPU embedded RISC processor
EM_NDR10x39Denso NDR1 microprocessor
EM_STARCORE0x3AMotorola Star*Core processor
EM_ME160x3BToyota ME16 processor
EM_ST1000x3CSTMicroelectronics ST100 processor
EM_TINYJ0x3DAdvanced Logic Corp. TinyJ embedded processor family
EM_X86_640x3EAMD x86-64
EM_MCST_ELBRUS0xAFЭльбрус (процессорная архитектура)
EM_TI_C60000x8CTMS320C6000 Family
EM_AARCH640xB7ARM 64-bits (ARMv8/Aarch64)
EM_RISCV0xF3RISC-V
EM_BPF0xF7Berkeley Packet Filter
EM_658160x101WDC 65C816
4
e_versionНомер версии формата. На данный момент корректным считается только одно значение.
НазваниеЗначениеОписание
EV_NONE0Некорректное значение
EV_CURRENT1Текущая версия
4
8
e_entryВиртуальный адрес точки входа, которому система передает управление при запуске процесса. Если у файла нет точки входа, это поле содержит 0.
4
8
e_phoffСмещение таблицы заголовков программы от начала файла в байтах. Если у файла нет таблицы заголовков программы, это поле содержит 0.
4
8
e_shoffСмещение таблицы заголовков секций от начала файла в байтах. Если у файла нет таблицы заголовков секций, это поле содержит 0.
4
e_flagsСвязанные с файлом флаги, зависящие от процессора. При их отсутствии это поле содержит 0.
2
e_ehsizeРазмер заголовка файла в байтах (52 для 32-битных файлов и 64 для 64-битных).
2
e_phentsizeРазмер одного заголовка программы. Все заголовки программы имеют одинаковый размер (32 для 32-битных файлов и 56 для 64-битных).
2
e_phnumЧисло заголовков программы. Если у файла нет таблицы заголовков программы, это поле содержит 0.
2
e_shentsizeРазмер одного заголовка секции. Все заголовки секций имеют одинаковый размер (40 для 32-битных файлов и 64 для 64-битных).
2
e_shnumЧисло заголовков секций. Если у файла нет таблицы заголовков секций, это поле содержит 0.
2
e_shstrndxИндекс записи в таблице заголовков секций, описывающей таблицу названий секций (обычно эта таблица называется .shstrtab и представляет собой отдельную секцию). Если файл не содержит таблицы названий секций, это поле содержит 0.

Таблица заголовков программы править

Таблица заголовков программы содержит заголовки, каждый из которых описывает отдельный сегмент программы и его атрибуты либо другую информацию, необходимую операционной системе для подготовки программы к исполнению.Данная таблица может располагаться в любом месте файла, её местоположение (смещение относительно начала файла) описывается в поле e_phoff заголовка ELF.

При анализе структуры заголовка программы можно обнаружить различное местоположение поля p_flags для 32- и 64-битных ELF файлов. Данное различие обуславливается выравниванием структуры для увеличения эффективности обработки.

Поля заголовка программы
РазмерНазваниеНазначение
ELF

32

ELF

64

4
p_typeТип сегмента, который описывает данный заголовок, или каким образом интерпретировать значения полей этого заголовка.
НазваниеЗначениеОписание
PT_NULL0Заголовок не используется, остальные поля не определены. Данный тип позволяет включать в таблицу заголовков программы файла игнорируемые элементы.
PT_LOAD1Загружаемый сегмент, описываемый полями p_filesz и p_memsz. Байты из файла отражаются на сегменте в памяти. Если размер сегмента в памяти (p_memsz) больше размера сегмента в файле (p_filesz), дополнительные байты заполняются нулями (они следуют сразу за определенными в сегменте байтами). Размер сегмента в файле (p_filesz) не может быть больше размера сегмента в памяти (p_memsz). Заголовки программы загружаемых сегментов располагаются в таблице заголовков программ в порядке возрастания значения поля p_vaddr.
PT_DYNAMIC2Заголовок программы предоставляет информацию о динамической компоновке.
PT_INTERP3Заголовок программы предоставляет размер и местоположение пути (строки в стиле C с завершающим нулём) для запуска в качестве интерпретатора. Этот тип сегмента имеет смысл только для исполняемых файлов (хотя он может быть и в совместно используемом объектном файле); он не может встречаться более одного раза в файле. Если заголовок такого типа присутствует, он должен предшествовать любому заголовку программы загружаемого сегмента.
PT_NOTE4Заголовок программы определяет местоположение и размер вспомогательной информации.
PT_SHLIB5Этот тип сегмента зарезервирован, но его смысл не определён. Программы, содержащие заголовок программы этого типа, не соответствуют ABI.
PT_PHDR6Заголовок программы, если он присутствует, определяет местоположение и размер самой таблицы заголовков программы, как в файле, так и в образе памяти программы. Этот тип сегмента не может встречаться более одного раза в файле. Более того, он может встретиться только при наличии в файле таблицы заголовков программы. Если заголовок такого типа присутствует, он должен предшествовать любому заголовку программы загружаемого сегмента.
PT_TLS7Заголовок программы определяет шаблон Thread-Local Storage. Загрузчики ELF не должны поддерживать эту запись в таблице заголовков программ.
PT_LOOS - PT_HIOS1610612736 - 1879048191Зависимые от операционной системы значения.
PT_LOPROC - PT_HIPROC1879048192 - 2147483647Зависимые от процессора значения.
4
p_flagsФлаги, относящиеся к сегменту (для ELF64).
НазваниеЗначениеОписание
PF_X0x1Разрешение на исполнение
PF_W0x2Разрешение на запись
PF_R0x4Разрешение на чтение
PF_MASKOS0x0ff00000Все биты, включенные в это поле, определяют зависящие от операционной системы значения
PF_MASKPROC0xf0000000Все биты, включенные в это поле, определяют зависящие от процессора значения
4
8
p_offsetСмещение сегмента от начала файла.
4
8
p_vaddrВиртуальный адрес сегмента в памяти, куда должен быть загружен сегмент при отображении в память.
4
8
p_paddrФизический адрес сегмента (для систем, в которых он важен).
4
8
p_fileszРазмер сегмента в файле. Может быть нулевым.
4
8
p_memszРазмер сегмента в памяти. Может быть нулевым.
4
p_flagsФлаги, относящиеся к сегменту (для ELF32) (возможные значения см. выше).
4
8
p_alignВыравнивание сегмента. 0 и 1 определяют отсутствие выравнивания. В противном случае должно быть положительной двойкой в определённой степени.

Таблица заголовков секций править

Таблица заголовков секций содержит атрибуты секций файла. Данная таблица необходима только компоновщику, исполняемые файлы в наличии этой таблицы не нуждаются (ELF загрузчик её игнорирует). Предоставленную в таблице заголовков секций информацию компоновщик использует для оптимального размещения данных секций по сегментам при сборке файла с учётом их атрибутов.

Поля заголовка секции
РазмерНазваниеНазначение
ELF

32

ELF

64

4
sh_nameСмещение строки, содержащей название данной секции, относительно начала таблицы названий секций.
4
sh_typeТип заголовка.
НазваниеЗначениеОписание
SHT_NULL0Заголовок не используется, остальные поля не определены.
SHT_PROGBITS1Секция содержит информацию, определённую программой, её формат и значение определяется программой единолично.
SHT_SYMTAB2Секция содержит таблицу символов. В настоящий момент в файле может быть только одна такая секция.
SHT_STRTAB3Секция содержит таблицу строк. Файл может иметь множество секций такого типа.
SHT_RELA4Секция содержит расширенную информацию о перемещениях. Файл может иметь множество секций такого типа.
SHT_HASH5Секция содержит таблицу хэшей символов. В настоящий момент в файле может быть только одна такая секция.
SHT_DYNAMIC6Секция содержит информацию о динамической компоновке. В настоящий момент в файле может быть только одна такая секция.
SHT_NOTE7Секция содержит информацию, которая каким-то образом отмечает файл.
SHT_NOBITS8Секция не занимает места в файле, в противном случае схожа с SHT_PROGBITS.
SHT_REL9Секция содержит информацию о перемещениях. Файл может иметь множество секций такого типа.
SHT_SHLIB10Данный тип секции определён, но не имеет определённого значения.
SHT_DYNSYM11Секция содержит таблицу символов. В настоящий момент в файле может быть только одна такая секция.
SHT_INIT_ARRAY14Секция содержит массив указателей на функции инициализации программы. Функции не должны принимать аргументов и чего-либо возвращать.
SHT_FINI_ARRAY15Секция содержит массив указателей на функции финализации программы. Функции не должны принимать аргументов и чего-либо возвращать.
SHT_PREINIT_ARRAY16Секция содержит массив указателей на функции, вызываемые до вызова функций инициализации программы. Функции не должны принимать аргументов и чего-либо возвращать.
SHT_GROUP17В этой секции определяется группа секций. Группа секций представляет собой набор связанных секций, которые должны быть специальным образом обработаны компоновщиком. Такие секции могут быть только в перемещаемых объектных файлах (чьё поле e_type имеет значение ET_REL). Заголовок, определяющий группу секций, должен находиться в таблице секций до заголовков всех секций, включённых в определяемую группу.
SHT_SYMTAB_SHNDX18Секция связана с таблицей символов и необходима в том случае, если любой элемент этой таблицы ссылается на заголовок секции, имеющий индекс SHN_XINDEX (это происходит в том случае, если индекс секции настолько велик, что не вмещается в поле st_shndx). Секция содержит массив чисел типа Elf32_Word для ELF32 и Elf64_Word для ELF64. Каждый элемент этого массива соответствует записи в таблице символов, и располагается в соответствующем порядке. Эти элементы представляют собой индексы заголовков секций, с которыми связаны соответствующие символы. В том случае, если значение поля st_shndx соответствующего элемента таблицы символов равно SHN_XINDEX, элемент содержит настоящий индекс заголовка секции, в противном случае, элемент содержит 0.
SHT_LOOS - SHT_HIOS1610612736 - 1879048191Зависимые от операционной системы значения.
SHT_LOPROC - SHT_HIPROC1879048192 - 2147483647Зависимые от процессора значения.
SHT_LOUSER - SHT_HIUSER2147483648 - 4294967295Зависимые от программы значения. Данные значения могут быть использованы обработчиками файлов формата ELF без конфликтов с определёнными в текущий момент значениями.
4
8
sh_flagsАтрибуты секции.
НазваниеЗначениеОписание
SHF_WRITE0x1Разрешение на запись.
SHF_ALLOC0x2Секция занимает память во время выполнения процесса. Некоторые служебные секции не загружаются в память при загрузке объектного файла, для таких секций данный флаг отключается.
SHF_EXECINSTR0x4Секция содержит исполняемые машинные инструкции.
SHF_MERGE0x10Данные в секции могут быть объединены для устранения дублирования. Если флаг SHF_STRINGS не установлен, элементы данных в секции имеют одинаковый размер. Размер одного элемента указывается в поле sh_entsize. Если флаг SHF_STRINGS установлен, секция состоит из массивов символов с завершающим нулём и размер одного символа указывается в поле sh_entsize.

Каждый элемент в секции сравнивается с другими элементами в секциях с тем же именем, типом и флагами. Элементы, которые будут иметь одинаковые значения во время выполнения программы, могут быть объединены. Перемещения, ссылающиеся на элементы таких секций, должны быть разрешены соответствующим образом. Перед объединением все элементы секции должны быть проанализированы для определения того, будут ли значения фактически идентичными во время выполнения.

Подобное объединение не является обязательным требованием для соответствия ABI.

SHF_STRINGS0x20Секция состоит из массивов символов с завершающим нулём. Размер одного символа указывается в поле sh_entsize.
SHF_INFO_LINK0x40Поле sh_info данного заголовка секции содержит индекс элемента таблицы заголовков секций.
SHF_LINK_ORDER0x80Особые требования по расположению. Требования применяются, если поле sh_link этого заголовка секции ссылается на другую секцию (связанная секция). Если поле sh_link связанной секции не содержит 0, в выходном файле текущая секция должна располагаться в том же порядке относительно связанной секции, что и связанная секция относительно секции, с которой она связана.
SHF_OS_NONCONFORMING0x100Секция требует специальной, зависящей от операционной системы, обработки для предотвращения некорректного поведения.
SHF_GROUP0x200Секция - элемент (возможно, единственный) группы секций
SHF_TLS0x400Секция содержит Thread-Local Storage, каждый поток будет иметь собственную копию данной секции.
SHF_COMPRESSED0x800Секция содержит сжатые данные. Данный флаг применяется только к секциям, память под которые не выделяется при загрузке объектного файла в память. Флаг не используется в комбинации с SHF_ALLOC. Данный флаг также неприменим к секциям, имеющим тип SHT_NOBITS.

Все перемещения, относящиеся к сжатой секции, ссылаются на её данные в несжатом состоянии. Поэтому для разрешения перемещений необходимо декомпрессирование секции. Каждая сжатая секция задает алгоритм её сжатия самостоятельно. Допустимо, чтобы разные секции в объектном файле ELF применяли различные алгоритмы сжатия.

Сжатые секции начинаются с заголовка, идентифицирующего алгоритм сжатия.

Поля заголовка сжатой секции
РазмерНазваниеНазначение
ELF

32

ELF

64

44ch_typeАлгоритм сжатия.
НазваниеЗначениеОписание
ELFCOMPRESS_ZLIB1Данные в секции сжаты с использованием алгоритма Zlib. Сжатые данные следуют сразу после заголовка и до конца секции.
ELFCOMPRESS_LOOS - ELFCOMPRESS_HIOS1610612736 - 1879048191Зависимые от операционной системы значения.
ELFCOMPRESS_LOPROC - ELFCOMPRESS_HIPROC1879048192 - 2147483647Зависимые от процессора значения.
4ch_reservedЗарезервировано для будущего использования.
48ch_sizeРазмер в байтах декомпрессированной секции.
48ch_addralignНеобходимое для декомпрессированной секции выравнивание.
SHF_MASKOS0x0ff00000Все биты, включенные в это поле, определяют зависящие от операционной системы значения
SHF_MASKPROC0xf0000000Все биты, включенные в это поле, определяют зависящие от процессора значения
4
8
sh_addrЕсли секция должна быть загружена в память при загрузке объектного файла, это поле указывает адрес, начиная с которого секция будет загружена, в противном случае поле содержит 0.
4
8
sh_offsetСмещение секции от начала файла в байтах. Секции типа SHT_NOBITS не занимают места в файле, для них данное поле содержит концептуальное местоположение в файле.
4
8
sh_sizeРазмер секции в файле. Может быть нулевым.
4
sh_linkИндекс ассоциированной секции. Данное поле может иметь различное предназначение в зависимости от типа заголовка.
Интерпретация полей sh_link и sh_info в зависимости от значения поля sh_type
sh_typesh_linksh_info
SHT_DYNAMICИндекс заголовка секции таблицы строк, которая используется элементами данной секции.0
SHT_HASHИндекс заголовка секции таблицы символов, к которой относится данная таблица хэшей.0
SHT_REL, SHT_RELAИндекс заголовка секции ассоциированной таблицы символов.Индекс заголовка секции, к которой должны быть применены данные перемещения.
SHT_SYMTAB, SHT_DYNSYMИндекс заголовка секции ассоциированной таблицы строк.На один больше, чем индекс последнего локального символа (STB_LOCAL) в таблице символов.
SHT_GROUPИндекс заголовка секции ассоциированной таблицы символов.Индекс элемента в ассоциированной таблице символов. Имя указанного элемента предоставляет сигнатуру группы секций.
SHT_SYMTAB_SHNDXИндекс заголовка секции ассоциированной секции таблицы символов.0
4
sh_infoДополнительная информация о секции (возможные значения см. выше).
4
8
sh_addralignНеобходимое выравнивание секции.
4
8
sh_entsizeРазмер в байтах каждой записи (в том случае, если секция содержит массив записей фиксированного размера, в противном случае поле содержит 0).

Содержимое секций и сегментов править

Утилиты править

Существует множество утилит для работы с файлами формата ELF, основные из них содержатся в наборе программных инструментов GNU Binutils:

  • elfedit — изменение заголовка файла ELF, часть набора GNU Binutils.
  • objdump — вывод информации об объектных файлах (в том числе и ELF), часть набора GNU Binutils.
  • readelf — вывод подробной информации об объектном файле формата ELF, часть набора GNU Binutils.
  • elfdump — вывод информации о ELF файле, часть набора GNU Binutils.
  • elfutils — альтернатива для GNU Binutils, официально доступна только для GNU/Linux, но существуют порты на другие операционные системы[4].
  • file — вывод небольшого количества информации о файлах известных программе форматов (доступна для большинства UNIX-подобных операционных систем).

См. также править

Примечания править

  1. System V Application Binary Interface Архивная копия от 21 мая 2015 на Wayback Machine Edition 4.1 (1997-03-18)
  2. Спецификация ELF Архивная копия от 16 июня 2012 на Wayback Machine  (англ.)
  3. ELF-64 Object File Format Архивная копия от 1 июля 2015 на Wayback Machine
  4. FreshPorts -- devel/elfutils. www.freshports.org. Дата обращения: 31 марта 2018. Архивировано 16 февраля 2018 года.

Ссылки править

🔥 Top keywords: Заглавная страницаЯндексСлужебная:ПоискСу-57YouTubeГодовщины свадьбыЗаворотнюк, Анастасия ЮрьевнаОбодзинский, Валерий ВладимировичЗверев, АлександрКараганов, Сергей АлександровичАлькарас, КарлосВыборы в Европейский парламент (2024)Список умерших в 2024 годуЧемпионат Европы по футболу 2024РоссияПопков, Михаил ВикторовичЧернышёв, Пётр АндреевичГреф, Герман ОскаровичЧикатило, Андрей РомановичПушкин, Александр СергеевичFallout (серия игр)КлеопатраПутин, Владимир ВладимировичИмавов, Нассурдин АбдулазимовичАзбука МорзеБитва экстрасенсовРаспутин, Григорий ЕфимовичБарабаш, Юрий Владиславович9 июняМинистерство неджентльменских делВторжение России на Украину (с 2022)WildberriesСписок фильмов кинематографической вселенной MarvelTelegramХристианско-демократический союз ГерманииАльтернатива для ГерманииВКонтактеВодительское удостоверение в Российской ФедерацииЖукова, Софья Ивановна