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

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

Автор АндрСй РобачСвский

Π’ сСгмСнтС Ρ‚ΠΈΠΏΠ° INTERP хранится ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€. Π”Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ сСгмСнта ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ динамичСскоС связываниС. Π‘ΡƒΡ‚ΡŒ динамичСского связывания Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ исполняСмого Ρ„Π°ΠΉΠ»Π° (раздСляСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹) ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π½Π΅ Π½Π° этапС компиляции, Π° Π½Π° этапС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Имя Ρ„Π°ΠΉΠ»Π°, ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ динамичСским Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ связСй, хранится Π² Π΄Π°Π½Π½ΠΎΠΌ сСгмСнтС. Π’ процСссС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ядро создаСт ΠΎΠ±Ρ€Π°Π· процСсса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ связСй. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ загруТаСтся Π½Π΅ исходная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π° динамичСский Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ связСй. На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ этапС динамичСский Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ связСй совмСстно с ядром UNIX ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· исполняСмого Ρ„Π°ΠΉΠ»Π°. ДинамичСский Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ раздСляСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… хранятся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… сСгмСнтах исходного исполняСмого Ρ„Π°ΠΉΠ»Π°, ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈ связываниС. Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаСтся исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

НаконСц, Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ„Π°ΠΉΠ» Ρ‚Π°Π±Π»ΠΈΡ†Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΈΠ»ΠΈ сСкций (section). Π Π°Π·Π΄Π΅Π»Ρ‹ (сСкций) ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Ρ„Π°ΠΉΠ»Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для связывания с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ модулями Π² процСссС компиляции ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ динамичСском связывании. БоотвСтствСнно, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ содСрТат всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для описания этих Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ содСрТат Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ сСгмСнтах. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сСгмСнт ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π° для хранСния индСксов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ символов, Ρ€Π°Π·Π΄Π΅Π» ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°Π±Π»ΠΈΡ†Π° связывания, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ динамичСским Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Π΄Π΅Π», содСрТащий собствСнно инструкции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠœΡ‹ Π΅Ρ‰Π΅ вСрнСмся ΠΊ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ ELF Π² Π³Π»Π°Π²Π΅ 3 ΠΏΡ€ΠΈ обсуТдСнии ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти процСсса, Π° ΠΏΠΎΠΊΠ° ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ распространСнному Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ β€” COFF.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ COFF

На рис. 2.5 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° структура исполняСмого Ρ„Π°ΠΉΠ»Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° COFF. Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹ΠΉ Ρ„Π°ΠΉΠ» содСрТит Π΄Π²Π° основных Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° β€” Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ COFF ΠΈ стандартный Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ систСмы UNIX β€” a.out. Π”Π°Π»Π΅Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΈ сами Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Ρ„Π°ΠΉΠ»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… хранятся инструкции ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НаконСц, Π² Ρ„Π°ΠΉΠ»Π΅ Ρ‚Π°ΠΊΠΆΠ΅ хранится символьная информация, нСобходимая для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ.

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

Π’ Ρ„Π°ΠΉΠ»Π΅ находятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ всСгда Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ нулями ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, для Π½ΠΈΡ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ располоТСниС Π² памяти.

Бимвольная информация состоит ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ символов (symbol table) ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ строк (string table). Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ хранятся символы, ΠΈΡ… адрСса ΠΈ Ρ‚ΠΈΠΏΡ‹. НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ символ locptr являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ Π΅Π³ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс Ρ€Π°Π²Π΅Π½ 0x7feh0. Π”Π°Π»Π΅Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ этот адрСс, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ символа для Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎΡΡ процСсса. Записи Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ символов ΠΈΠΌΠ΅ΡŽΡ‚ фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€. Если Π΄Π»ΠΈΠ½Π° символа ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ восСмь Π·Π½Π°ΠΊΠΎΠ², Π΅Π³ΠΎ имя хранится Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ β€” Ρ‚Π°Π±Π»ΠΈΡ†Π΅ строк. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±Π΅ эти Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… ΠΈ исполняСмых Ρ„Π°ΠΉΠ»Π°Ρ…, Ссли ΠΎΠ½ΠΈ явно Π½Π΅ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ strip(1).

Как ΠΈ Π² случаС ELF-Ρ„Π°ΠΉΠ»Π°, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ содСрТит ΠΎΠ±Ρ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΡƒΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ мСстополоТСниС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (Ρ‚Π°Π±Π». 2.5).


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

ПолС ОписаниС f_magic Аппаратная ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ создан Ρ„Π°ΠΉΠ» f_nscns ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Π² Ρ„Π°ΠΉΠ»Π΅ f_timdat ВрСмя ΠΈ Π΄Π°Ρ‚Π° создания Ρ„Π°ΠΉΠ»Π° f_symptr РасполоТСниС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ символов Π² Ρ„Π°ΠΉΠ»Π΅ f_nsyms ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ записСй Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ символов f_opthdr Π Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° f_flags Π€Π»Π°Π³ΠΈ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π°, присутствиС символьной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ Ρ‚.Π΄.

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ COFF присутствуСт Π² исполняСмых Ρ„Π°ΠΉΠ»Π°Ρ…, ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΠ²Π°Ρ…. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ» ΠΊΡ€ΠΎΠΌΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° COFF содСрТит Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ a.out, хранящий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ядру систСмы для запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹[16] (Ρ‚Π°Π±Π». 2.6).


Π’Π°Π±Π»ΠΈΡ†Π° 2.6. Поля Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° a.out

ПолС ОписаниС vstamp НомСр вСрсии Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° tsize Π Π°Π·ΠΌΠ΅Ρ€ Ρ€Π°Π·Π΄Π΅Π»Π° инструкций (text) dsize Π Π°Π·ΠΌΠ΅Ρ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (data) bsize Π Π°Π·ΠΌΠ΅Ρ€ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (bss) entry Π’ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ text_start АдрСс Π² Π½Π°Ρ‡Π°Π»Π° сСгмСнта инструкций Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти data_start АдрСс Π² Π½Π°Ρ‡Π°Π»Π° сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти

ВсС Ρ„Π°ΠΉΠ»Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° COFF ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… описываСтся своим Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ. Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ хранится имя Ρ€Π°Π·Π΄Π΅Π»Π° (.text, .data, .bss ΠΈΠ»ΠΈ любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅, установлСнноС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ ассСмблСра), Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π°Π·Π΄Π΅Π»Π°, Π΅Π³ΠΎ располоТСниС Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ адрСс послС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ сразу Π·Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ Ρ„Π°ΠΉΠ»Π°.

Π’Π°Π±Π»ΠΈΡ†Ρ‹ символов ΠΈ строк ΡΠ²Π»ΡΡŽΡ‚ΡΡ основой систСмы ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Π‘ΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ являСтся любая пСрСмСнная, имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΊΠ°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

КаТдая запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ символов Ρ…Ρ€Π°Π½ΠΈΡ‚ имя символа, Π΅Π³ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс, Π½ΠΎΠΌΠ΅Ρ€ Ρ€Π°Π·Π΄Π΅Π»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ символ, Ρ‚ΠΈΠΏ, класс хранСния (автоматичСский, рСгистровый ΠΈ Ρ‚.Π΄.). Если имя символа Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ большС восьми Π±Π°ΠΉΡ‚, Ρ‚ΠΎ ΠΎΠ½ΠΎ хранится Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ строк. Π’ этом случаС Π² ΠΏΠΎΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ символа указываСтся смСщСниС ΠΈΠΌΠ΅Π½ΠΈ символа Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ строк.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ символьной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ символа. Одним ΠΈΠ· ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ этой возмоТности являСтся использованиС символьной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…- ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°Ρ…. Π­Ρ‚Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ ps(1), ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π΅ΠΉ состояниС процСссов Π² систСмС.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС UNIX

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ начинаСтся с создания Π² памяти Π΅Π΅ ΠΎΠ±Ρ€Π°Π·Π° ΠΈ связанных с процСссом структур ядра ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ управлСния инструкциям ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Π΅Π΄Π΅Ρ‚ ΠΊ освобоТдСнию памяти ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… структур ядра. ΠžΠ±Ρ€Π°Π· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² памяти содСрТит, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, сСгмСнты инструкций ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, созданныС компилятором, Π° Ρ‚Π°ΠΊΠΆΠ΅ стСк для хранСния автоматичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Запуск C-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Ѐункция main() являСтся ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ (Ρ‚. Π΅. явно описанной Π² исходном тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ послС создания ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ окруТСния запускаСмой Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ функция main() опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

main(int argc, char *argv[], char *envp[]);

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ (argc) опрСдСляСт число ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΅Π΅ имя.

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² массивС argv[], Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Π΅Ρ€Π΅Π· argv[0] адрСсуСтся строка, содСрТащая имя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, argv[1] ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈ Ρ‚.Π΄.. Π΄ΠΎ argv[argc-1].

Массив envp[] содСрТит ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. КаТдая пСрСмСнная прСдставляСт собой строку Π²ΠΈΠ΄Π° имя_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ=Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠœΡ‹ ΡƒΠΆΠ΅ познакомились с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ окруТСния Π² Π³Π»Π°Π²Π΅ 1, ΠΊΠΎΠ³Π΄Π° обсуТдали ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€. БСйчас ΠΆΠ΅ ΠΌΡ‹ остановимся Π½Π° ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ "Π°Π½Π°Ρ‚ΠΎΠΌΠΈΠΈ".

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ ANSI Π‘ опрСдСляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main() β€” argc ΠΈ argv. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ POSIX.1 опрСдСляСт Ρ‚Π°ΠΊΠΆΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ envp, хотя Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ окруТСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ environ, ΠΊΠ°ΠΊ это ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 2.6: