Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIXΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 32

Автор РобачСвский АндрСй ΠœΠΈΡ…Π°ΠΉΠ»ΠΎΠ²ΠΈΡ‡

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° создания Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ являСтся ΠΎΠ±Ρ‰Π΅ΠΉ ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° рис.Β 2.2.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIX - img_14.jpeg

Рис. 2.2. Π‘Ρ…Π΅ΠΌΠ° компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΠ΅Ρ€Π²ΠΎΠΉ Ρ„Π°Π·ΠΎΠΉ являСтся стадия компиляции, ΠΊΠΎΠ³Π΄Π° Ρ„Π°ΠΉΠ»Ρ‹ с исходными тСкстами ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ„Π°ΠΉΠ»Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ компилятором cc(1). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ компиляции Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π°ΠΉΠ»Π° makefile (ΠΈΠ»ΠΈ Makefile), Π»ΠΈΠ±ΠΎ явным ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΎΠΏΡ†ΠΈΠΉ компилятора Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. Π’ ΠΈΡ‚ΠΎΠ³Π΅ компилятор создаСт Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ ΠΈΠΌΠ΅Π½Π° созданных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ суффикс ".o".

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ стадии эти Ρ„Π°ΠΉΠ»Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° связСй ld(1) ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠŸΡ€ΠΈ этом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ связСй ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Π΄Π²ΡƒΡ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…: статичСском ΠΈ динамичСском, Ρ‡Ρ‚ΠΎ задаСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ опциями. Π’ статичСском, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ΡΡ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ статичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (ΠΈΡ… ΠΈΠΌΠ΅Π½Π° ΠΈΠΌΠ΅ΡŽΡ‚ суффикс ".Π°"), производится Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ всСх Π²Π½Π΅ΡˆΠ½ΠΈΡ… ссылок ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ создаСтся Π΅Π΄ΠΈΠ½Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ», содСрТащий вСсь Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для выполнСния ΠΊΠΎΠ΄. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ связСй ΠΏΠΎ возмоТности ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ раздСляСмыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (ΠΈΠΌΠ΅Π½Π° этих Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΠΌΠ΅ΡŽΡ‚ суффикс ".so"). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ создаСтся исполняСмый Ρ„Π°ΠΉΠ», ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² процСссС запуска Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ всС раздСляСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π’ ΠΎΠ±ΠΎΠΈΡ… случаях ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ создаСтся исполняСмый Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ a.out.

Для достаточно простых Π·Π°Π΄Π°Ρ‡ всС Ρ„Π°Π·Ρ‹ автоматичСски Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

$ make prog

ΠΈΠ»ΠΈ эквивалСнтной Π΅ΠΉ

$ cc -ΠΎ prog prog.c

ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ исполняСмый Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ prog. Π’ этом случаС ΡƒΠΌΠ°Π»Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ имя исполняСмого Ρ„Π°ΠΉΠ»Π° (a.out) ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° prog с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ -ΠΎ.

Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ стадии ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎ, с использованиСм ΠΊΠΎΠΌΠ°Π½Π΄ cc(1) ΠΈ ld(1). Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° cc(1) являСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ ΠΈ компилятора ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° связСй, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ создании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

ΠŸΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ процСсс создания Π±ΠΎΠ»Π΅Π΅ слоТной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄.

$ <b>cc -с file1.c file2.c</b>

$ <b>cc -ΠΎ prog</b>

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ file1.o ΠΈ file2.o

$ <b>cc -o prog file1.o file2.o -lnsl</b>

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ исполняСмый Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ prog, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ libnsl.a ΠΈΠ»ΠΈ libnsl.so

Π€ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ²

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ процСсса состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сСгмСнтов ΠΈΠ»ΠΈ областСй памяти. Π Π°Π·ΠΌΠ΅Ρ€, содСрТимоС ΠΈ располоТСниС сСгмСнтов Π² памяти опрСдСляСтся ΠΊΠ°ΠΊ самой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ исполняСмого Ρ„Π°ΠΉΠ»Π° этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ соврСмСнных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм UNIX ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²Π° стандартных Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² β€” COFF (Common Object File Format) ΠΈ ELF (Executable and Linking Format).

ОписаниС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ лишним, ΠΎΠ΄Π½Π°ΠΊΠΎ прСдставлСниС ΠΎ Π½ΠΈΡ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для описания Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ядра ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Π’ частности, информация, хранящаяся Π² исполняСмых Ρ„Π°ΠΉΠ»Π°Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² COFF ΠΈ ELF позволяСт ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° ряд вопросов вСсьма Π²Π°ΠΆΠ½Ρ‹Ρ… для Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния ΠΈ систСмы Π² Ρ†Π΅Π»ΠΎΠΌ:

β–‘Β ΠšΠ°ΠΊΠΈΠ΅ части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ?

β–‘Β ΠšΠ°ΠΊ создаСтся ΠΎΠ±Π»Π°ΡΡ‚ΡŒ для Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…?

β–‘Β ΠšΠ°ΠΊΠΈΠ΅ части процСсса Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сохранСны Π² дисковой области свопинга (ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ области дискового пространства, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΉ для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ хранСния Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² адрСсного пространства процСсса), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ страниц, Π° ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈ нСобходимости считаны ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ сохранСния?

β–‘Β Π“Π΄Π΅ Π² памяти Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ инструкции ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹?

β–‘Β ΠšΠ°ΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹?

β–‘Β ΠšΠ°ΠΊ связаны исполняСмый Ρ„Π°ΠΉΠ» Π½Π° дискС, ΠΎΠ±Ρ€Π°Π· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² памяти ΠΈ дисковая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ свопинга?

На рис. 2.3 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° базовая структура памяти для процСссов, Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ· исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² COFF ΠΈ ELF, соотвСтствСнно. Π₯отя располоТСниС сСгмСнтов различаСтся для этих Π΄Π²ΡƒΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ², основныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅. Оба процСсса ΠΈΠΌΠ΅ΡŽΡ‚ сСгмСнты ΠΊΠΎΠ΄Π° (text), Π΄Π°Π½Π½Ρ‹Ρ… (data), стСка (stack). Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· рисунка, Ρ€Π°Π·ΠΌΠ΅Ρ€ сСгмСнтов Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ стСка ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, Π° Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ этого измСнСния опрСдСляСтся Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ исполняСмого Ρ„Π°ΠΉΠ»Π°. Π Π°Π·ΠΌΠ΅Ρ€ стСка автоматичСски измСняСтся ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… производится самим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π­Ρ‚ΠΈ вопросы ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ обсудим Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ "Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти" Π΄Π°Π»Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIX - img_15.jpeg

Рис. 2.3. Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² COFF ΠΈ ELF

Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΠ· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² исполняСмого Ρ„Π°ΠΉΠ»Π°, ΠΈ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ нулями ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ выполнСния процСсса. НСинициализированныС Π΄Π°Π½Π½Ρ‹Π΅ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ сСгмСнтом BSS.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ ELF

Π€ΠΎΡ€ΠΌΠ°Ρ‚ ELF ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π»ΠΈ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, исполняСмый Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ стандарт ELF Ρ€Π°Π·Π»ΠΈΡ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹:

1.Β ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» (relocatable file), хранящий инструкции ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ связаны с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ связывания ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ раздСляСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

2. РаздСляСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» (shared object file) Ρ‚Π°ΠΊΠΆΠ΅ содСрТит инструкции ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован двумя способами. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ связан с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ раздСляСмыми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ создан Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС, ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ опСрационная систСма ΠΌΠΎΠΆΠ΅Ρ‚ динамичСски ΡΠ²ΡΠ·Π°Ρ‚ΡŒ Π΅Π³ΠΎ с исполняСмым Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ создан исполняСмый ΠΎΠ±Ρ€Π°Π· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ послСднСм случаС Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ раздСляСмых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ….

3.Β Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΏΠΎΠ»Π½ΠΎΠ΅ описаниС, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ систСмС ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· процСсса. Он содСрТит инструкции, Π΄Π°Π½Π½Ρ‹Π΅, описаниС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… раздСляСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

На рис.Β 2.4 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° структура исполняСмого Ρ„Π°ΠΉΠ»Π°, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ опСрационная систСма ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIX - img_16.jpeg

Рис. 2.4. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° исполняСмого Ρ„Π°ΠΉΠ»Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ELF

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ фиксированноС располоТСниС Π² Ρ„Π°ΠΉΠ»Π΅. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² соотвСтствии с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, хранящСйся Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ содСрТит ΠΎΠ±Ρ‰Π΅Π΅ описаниС структуры Ρ„Π°ΠΉΠ»Π°, располоТСниС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ELF-Ρ„Π°ΠΉΠ»Π° опрСдСляСт Π΅Π³ΠΎ структуру, рассмотрим Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ (Ρ‚Π°Π±Π». 2.4).

Π’Π°Π±Π»ΠΈΡ†Π° 2.3. Поля Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ELF-Ρ„Π°ΠΉΠ»Π°

ПолС ОписаниС
Π΅_ident[]
Массив Π±Π°ΠΉΡ‚, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… опрСдСляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ±Ρ‰ΡƒΡŽ характСристику Ρ„Π°ΠΉΠ»Π°: Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»Π° (ELF), Π½ΠΎΠΌΠ΅Ρ€ вСрсии, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ систСмы (32-разрядная ΠΈΠ»ΠΈ 64-разрядная) ΠΈ Ρ‚.Π΄.
e_type
Π’ΠΈΠΏ Ρ„Π°ΠΉΠ»Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ELF ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ нСсколько Ρ‚ΠΈΠΏΠΎΠ²
e_machine
АрхитСктура Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ создан Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π’ Ρ‚Π°Π±Π». 2.4 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния этого поля
e_version
НомСр вСрсии ELF-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ опрСдСляСтся ΠΊΠ°ΠΊ EV_CURRENC (тСкущая), Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ
e_entry
Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ систСмой Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π°)
e_phoff
РасполоТСниС (смСщСниС ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Ρ„Π°ΠΉΠ»Π°) Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
Π΅_shoff
РасполоТСниС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² сСкций
Π΅_ehsize
Π Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°
e_phentsize
Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
e_phnum
Число Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
e_shentsize
Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° сСгмСнта (сСкции)
Π΅_shnum
Число Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² сСгмСнтов (сСкций)
e_shstrndx
РасполоТСниС сСгмСнта, содСрТащСго Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ строк