Executable file formats in linux

If You Use Linux, You Lose Out If You Can’t Do This #3 – Executable files and ways of using shell variables

In the last column, I shared some nifty ways of using shell variables. In this installment, I’d like to introduce Linux executable files.

What are Linux executable files?

In general, Linux executable files contain programs written in a language like C and compiled so they can run in the Linux environment. In recent years, programs are often compiled in modern languages like Python, Java, Golang, and node.js, and you don’t have to care much about what the executable format is. But many kernels and GNU commands are still written in C, so it is important to know about this basic foundation.

` ` `
$ file /bin/ls
/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=9567f9a28e66f4d7ec4baf31cfbf68d0410f0ae6, stripped
` ` `

Let’s take a look at items of note here.

.

Item Explanation
—————— —————————
/bin/ls file command’s target file
ELF 64bit Format of the executable file
LSB Linux Standard Base-compliant
shared object The file uses a shared library.
x64-64 64-bit binary
version 1 version1
(SYSV) SysV-compliant
dynamically linked Uses dynamically-linked shared libraries
stripped Information about symbols are removed from the file.

Using the command ` ` ` elfread -h /bin/ls ` ` ` here gives useful information.

` ` `
$ readelf -h /bin/ls
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2’s complement, little endian
Version: 1 (current)
OS/ABI: UNIX – System V
ABI Version: 0
Type: DYN (Shared object file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x5850
Start of program headers: 64 (bytes into file)
Start of section headers: 132000 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 9
Size of section headers: 64 (bytes)
Number of section headers: 28
Section header string table index: 27
` ` `

For more information, read elfread’s documentation with ` ` ` man elfread ` ` ` .

What is the ELF format?

ELF (Executable and Linkable Format) is an executable file format for compiler-generated objects and executable files linked to libraries. ELF format is the successor of UNIX’s first executable file format, a.out, and its extension, the Common Object File Format (COFF). ELF Format is widely used by System VR4 and later UNIX systems and Linux.

Prior to ELF

COFF is a format used on 32-bit System V platforms. It allows the use of shared libraries and debugs information. However, it has shortcomings in its limits on the maximum number of sections and length of section names. It also couldn’t provide symbolic debugging information for languages like C++. However, extensions like XCOFF (AIX) and ECOFF (DEC, SGI) overcame these weaknesses, and there are versions of UNIX using these formats. Window’s PE+ format is also based on COFF.

ELF format

ELF’s feature is its flexible design that allows support for files in non-contiguous memory and when the load memory position and the execution memory position differ.

There are three types of ELF files:

  • Relocatable files
    • Contain sections with code and data
    • Applicable for creating executable files, shared objects, and other relocatable objects.
    • Contain executable programs
    • Designate the program’s image creation method with exec(2).
    • A shared object file Contains code and data to be linked in two contexts:
    1. The link-editor can process it with other relocatable and shared object files to create other object files.
    2. The runtime linker combines it with a dynamic executable file and other shared objects to create a process image.

    ELF’s object file format is as follows:

    Linking View Execution View
    ———————————— ————————————
    ELF header ELF header
    Program header table (optional) Program header table
    Section 1 Segment 1
    Segment 2
    Section n
    ..
    Section header table Section header table (optional)
    • ELF header
      • Usually resides at the beginning of the object file. It maintains a roadmap describing the file’s organization.
      • Except for the ELF header, there is no specified order for header tables, sections, and segments
      • Tells the system how to create a process image.
      • Files used to build a process image (execute a program) must have a program header table.
      • Relocatable files do not need a program header
      • Smallest unit that can be processed within an ELF file
      • Holds the bulk of object file information for the linking view (instructions, data, symbol table, and relocation information)
      • Smallest individual unit that can be mapped to a memory image by exec(2) or by the runtime linker.
      • Every section has an entry in the header table.
      • Each entry gives information such as the section name and section size.
      • Files that are used in link-editing must have a section header table.
      • A section header table is not required in other object files.

      With current versions of Linux, almost all binaries are created by dynamically linking ELF binaries. A dynamic link is a format composed of the executable format and libraries (shared objects). A static link, on the other hand, contains libraries in executable format.

      When creating static links, a library in *.a format and compiled objects are linked by the ld command. A library in the *.a format is an archive of objects compiled using the ar command.
      A statically-linked binary has the following features:

      1. Because a file contains multiple libraries, the file size becomes great.
      2. You don’t have to be mindful of the libraries’ dependencies.
      3. The version of the library used can be locked.
      4. You can execute the program just by copying the file.

      When dynamic links are created, libraries in .so (shared object) format and compiled objects are linked. .so is dynamically read during execution time.

      1. Because shared libraries (so) are dynamically linked, the size of the executable file is small.
      2. The dependencies of libraries are automatically resolved.
      3. Updating the version is possible at the library level.
      4. Not only files but also dependent libraries must be copied. Otherwise, the program won’t work.

      To be continued in the next column

      In this installment, I explained the ELF format. In the next column, I’ll explain how ELF is executed and how to handle the ELF format.

      Источник

      Understanding the Linux Kernel, Second Edition by

      Get full access to Understanding the Linux Kernel, Second Edition and 60K+ other titles, with a free 10-day trial of O’Reilly.

      There are also live events, courses curated by job role, and more.

      Executable Formats

      The standard Linux executable format is named Executable and Linking Format ( ELF ). It was developed by Unix System Laboratories and is now the most widely used format in the Unix world. Several well-known Unix operating systems, such as System V Release 4 and Sun’s Solaris 2, have adopted ELF as their main executable format.

      Older Linux versions supported another format named Assembler OUTput Format ( a.out ); actually, there were several versions of that format floating around the Unix world. It is seldom used now, since ELF is much more practical.

      Linux supports many other different formats for executable files; in this way, it can run programs compiled for other operating systems, such as MS-DOS EXE programs or BSD Unix’s COFF executables. A few executable formats, like Java or bash scripts, are platform-independent.

      An executable format is described by an object of type linux_binfmt , which essentially provides three methods:

      Sets up a new execution environment for the current process by reading the information stored in an executable file.

      Dynamically binds a shared library to an already running process; it is activated by the uselib( ) system call.

      Stores the execution context of the current process in a file named core . This file, whose format depends on the type of executable of the program being executed, is usually created when a process receives a signal whose default action is “dump” (see Section 10.1.1).

      Get Understanding the Linux Kernel, Second Edition now with the O’Reilly learning platform.

      O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.

      Источник

      20.5.2.7. Executable file formats

      В этом разделе вы сможете включить поддержку различных форматов исполняемых файлов. Обычно это нужно, если вы хотите запускать в эмуляторах программы других операционных систем, например, DOS- или Windows-программы.

      Данный текст является ознакомительным фрагментом.

      Читайте также

      5.5.3.1. Подделка utime(file, NULL)

      5.5.3.1. Подделка utime(file, NULL) Некоторые более старые системы не устанавливают значения времени доступа и изменения равным текущему времени, когда второй аргумент utime() равен NULL. Однако код более высокого уровня (такой, как GNU touch) проще, если он может полагаться на один

      Объект file

      Объект file Последним из основных объектов подсистемы VFS рассмотрим объект файла. Объект File используется для представления файлов, которые открыты процессом. Когда мы думаем о подсистеме VFS с точки зрения пространства пользователя, то объект файла — это то, что первое

      Объект File

      Объект File Объект File обеспечивает доступ ко всем свойствам файла. Создать этот объект можно с помощью метода GetFile объекта FileSystemObject следующим образом:var FSO, F;//Создаем объект FileSystemObjectFSO=WScript.CreateObject(«Scripting.FileSystemObject»);//Создаем объект FileF=FSO.GetFile(«С:Мои документахletter.txt»);Также

      (8.11) После подключения дополнительного жесткого диска W2k перестал загружаться. После ввода пароля говорит, что «your system has no paging file, or the paging file is too small» и снова выдает окно логона. Что делать?

      (8.11) После подключения дополнительного жесткого диска W2k перестал загружаться. После ввода пароля говорит, что «your system has no paging file, or the paging file is too small» и снова выдает окно логона. Что делать? Данная проблема появляется, если буква загрузочного раздела не совпадает с буквой,

      Установка File-3.39

      Установка File-3.39 Приблизительное время компиляции: 0.21 SBU Необходимое дисковое пространство: 2 MBИнсталляция FileДля инсталляции File выполните:./configure –prefix=/usr –datadir=/usr/share/misc && make && make installСодержимое FileПоследняя проверка: версия 3.39.ПрограммыfileОписанияfilefile проверяет

      File

      File Официальная ссылкаFile (3.39): ftp://ftp.gw.com/mirrors/pub/unix/file/Содержимое FileПоследняя проверка: версия 3.39.ПрограммыfileОписанияfilefile проверяет указанные файлы с целью их классификации. Есть 3 набора тестов, запускаемых в данном порядке: тесты файловой системы, тесты magic number и тесты

      14.9 Trivial File Transfer Protocol

      14.9 Trivial File Transfer Protocol Некоторым приложениям копирования файлов требуются очень простые реализации, например для начальной загрузки программного обеспечения и конфигурационных файлов в маршрутизаторы, концентраторы или бездисковые рабочие станции.Простейший протокол

      Shared Cache file

      Shared Cache file Параметр более не используется в InterBase.

      Реализация меню File

      Реализация меню File В данном разделе мы определим слоты и закрытые функции, необходимые для обеспечения работы меню File и для управления списком недавно используемых файлов.01 void MainWindow::newFile() 02 08 >Слот newFile()

      WWW File Share Pro

      WWW File Share Pro Производитель: LionMax Software (http://www.wfshome.com).Статус: коммерческая.Страница для скачивания: http://www.wfshome.com/download.htm.Размер: 2,7 Мбайт.Эта программа предназначена для открытия и настройки на компьютере простого HTTP-сервера, который можно применять для обмена файлами с

      Работа с типом File

      Работа с типом File Тип File предлагает функциональные возможности, почти идентичные возможностям типа FileInfo, но с помощью ряда статических членов. Подобно FileInfo, тип File предлагает методы AppendText(), Create(), CreateText(), Open(), OpenRead(), OpenWrite() и OpenText(). Во многих случаях типы File и FileStream

      Новые члены File в .NET 2.0

      Новые члены File в .NET 2.0 В отличие от FileInfo, тип File поддерживает (в .NET 2.0) несколько своих собственных уникальных членов, описания которых приводятся в табл. 16.5. С помощью этих членов можно существенно упростить процессы чтения и записи текстовых данных.Таблица 16.5. Методы типа

      Remote File Viewer

      Remote File Viewer Утилита Remote File Viewer является аналогом стандартного Проводника, входящего в состав Windows XP. С помощью этой утилиты пользователь может просматривать содержимое папок устройства или эмулятора, а также копировать файлы из устройства на настольный компьютер и

      Источник

      Читайте также:  Monitor all processes linux
Оцените статью
Adblock
detector