Вопрос по c++, gcc, linux – загрузка / выполнение программы

4

Я новичок в компиляторах, но мне очень интересно узнать, как программа структурирована (двоичная) и как она читается и загружается в память для выполнения. Какие электронные книги / книги / учебники вы, ребята, предлагаете мне прочитать для быстрого начала?

Действительно, ваш ответ был больше, чем я ожидал, спасибо. Не могли бы вы предложить больше ссылок - предпочтительно для книг / учебных пособий? JohnTortugo
Мой ответ содержит много соответствующих ссылок. Но это также зависит от того, что вы понимаете о программировании в целом и о современных компьютерных технологиях. Basile Starynkevitch
Вот еще несколько информативных ссылок:tldp.org/HOWTO/Program-Library-HOWTO/info-sources.html JohnTortugo

Ваш Ответ

2   ответа
4

ELF File Layout

An ELF file has two views:

  • The program header shows the segments used at run-time
  • The section header lists the set of sections of the binary

Each ELF file is made up of one ELF header, followed by file data.

The file data can include:

  • Program header table, describing zero or more segments
  • Section header table, describing zero or more sections
  • Data referred to by entries in the program header table or section header table

The segments contain information that is necessary for runtime execution of the file, while sections contain important data for linking and relocation. Any byte in the entire file can be owned by at most one section, and there can be orphan bytes which are not owned by any section.

enter image description here

Loading a program to memory

In computing, a loader is the part of an operating system that is responsible for loading programs.

It is one of the essential stages in the process of starting a program, as it places programs into memory and prepares them for execution.

Loading a program involves :

  • reading the contents of executable file, the file containing the program text, into memory
  • carrying out other required preparatory tasks to prepare the executable for running.

Once loading is complete, the operating system starts the program by passing control to the loaded program code.

The *NIX way

In Unix, the loader is the handler for the system call execve().

The Unix loader's tasks include:

  • validation (permissions, memory requirements etc.)
  • copying the program image from the disk into main memory
  • copying the command-line arguments on the stack
  • initializing registers (e.g., the stack pointer)
  • jumping to the program entry point (_start)
@ Dr.Kameleon спасибо за ответ и ссылку. Я прочитал уроки Джеймса Моллоя и нашел, что они великолепны!jamesmolloy.co.uk/tutorial_html/index.html JohnTortugo
@JohnTortugo Loader - это на самом деле программа (обычно) постоянно находящаяся в памяти, которая обрабатывает исполняемые файлы (читает / проверяет файл в соответствии с его форматом, копирует его в память и, в конечном итоге, «запускает» его)
Что мне нужно, чтобы написать свой собственный загрузчик? JohnTortugo
@JohnTortugo Зачем тебе это нужно? (Я написал крошечное микроядро ГОДА назад; я потерял код, так как ...: / Да, у него тоже был загрузчик ..) Честно говоря, кроме как хобби, эта вещь действительно сложно ...
Загрузчик - это библиотека? В файле ELF много разделов, они используются для загрузки программы, верно? Какая связь между этими разделами и загрузчиком? JohnTortugo
4

ский исполняемый файл создается компоновщикомldа не компилятор).

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

Вы могли бы быть заинтересованы в чтении оконструкция компилятораКнига Левина олинкеры & amp; погрузчики,Linux Assembly Howto,Библиотека программ Howto,LDD (1), execve (2), интро (2), вилка (2), ММАП (2), dlopen (3), Эльф (5), Proc (5), Сигнал (7) справочные страницы.

Попробуйте также понять, чтоcat /proc/self/maps показывает вам (карта памяти процесса, который делает этоcat). Вы также можете играть сobjdump.

Похожие вопросы