Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf

Π Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ для ELFΠΎΠ²

Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π€ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf

На русском языкС довольно ΠΌΠ°Π»ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎ Ρ‚ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ELF-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ (Executable and Linkable Format β€” основной Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² Linux ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Unix-систСм). НС ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΡƒΠ΅ΠΌ Π½Π° ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… сцСнариСв Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡΠ»ΡŒΡ„Π°ΠΌΠΈ, Π½ΠΎ надССмся, Ρ‡Ρ‚ΠΎ информация Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Π° Π² Π²ΠΈΠ΄Π΅ справочника ΠΈ сборника Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² для программистов ΠΈ рСвСрс-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ².

ΠŸΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌ с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ ELF (Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Ρ†ΠΈΠΊΠ» статСй Executable and Linkable Format 101).

Под ΠΊΠ°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ пСрСчислСны инструмСнты для Ρ€Π°Π±ΠΎΡ‚Ρ‹, описаны ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ для чтСния ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ размноТСния создания ΡΠ»ΡŒΡ„ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ссылки Π½Π° ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹.

β€” Π― Ρ‚ΠΎΠΆΠ΅ ΡΠ»ΡŒΡ„β€¦ Π‘ΠΈΠ½ΠΈΠΉ Π² красный… Π­Π»ΡŒΡ„Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ тСрпСливы… Π‘ΠΈΠ½ΠΈΠΉ Π² красный… А ΠΌΡ‹ ΡΠ»ΡŒΡ„Ρ‹. Π‘ΠΈΠ½ΠΈΠΉ Π² красный… ΠžΡ‚ ΠΌΠ°Π³ΠΈΠΈ ΠΎΠ΄Π½ΠΈ бСды…
(с) МалСнькоС королСвство Π‘Π΅Π½Π° ΠΈ Π₯ΠΎΠ»Π»ΠΈ

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π½Π° Linux, Ρ‚Π°ΠΊ ΠΈ Π½Π° Windows.

Π’ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°Ρ… ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ инструмСнты:

ВСстовыС ΡΠ»ΡŒΡ„Ρ‹

Π’ качСствС Β«ΠΏΠΎΠ΄ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠ³ΠΎΒ» Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ELF-Ρ„Π°ΠΉΠ» simple ΠΈΠ· таска nutcake’s PieIsMyFav Π½Π° crackmes.one, Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚ любой ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚Π΅Π»ΡŒ Β«ΡΠ»ΡŒΡ„ΠΈΠΉΡΠΊΠΎΠ³ΠΎΒ» сСмСйства. Если Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ характСристиками Π½Π΅ Π±Ρ‹Π» Π½Π°ΠΉΠ΄Π΅Π½ Π² свободном доступС, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ способ создания Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΡΠ»ΡŒΡ„Π°.

Β«Π‘Π²ΠΎΠ±ΠΎΠ΄Π½Ρ‹Ρ…Β» ΡΠ»ΡŒΡ„ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ ссылкам:

Π§Ρ‚Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

Π’ΠΈΠΏ Ρ„Π°ΠΉΠ»Π°, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, сСкции

Π’ зависимости ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ интСрСс ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ:

010Editor

HEX-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ 010Editor прСдоставляСт систСму шаблонов. Для ELF-Ρ„Π°ΠΉΠ»ΠΎΠ² шаблон называСтся, ΠΊΠ°ΠΊ Π½ΠΈ странно, ELF.bt ΠΈ находится Π² ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Executable (мСню Templates β€” Executable).
Π˜Π½Ρ‚Π΅Ρ€Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° Π² исполняСмый Ρ„Π°ΠΉΠ» (entry point) (записана Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Ρ„Π°ΠΉΠ»Π°).

Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π€ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf

readelf

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρƒ readelf ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ стандартом Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ для получСния свСдСний ΠΎΠ± ELF-Ρ„Π°ΠΉΠ»Π΅.

Для удобства чтСния адрСса ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΊ 32-Π±ΠΈΡ‚Π½ΠΎΠΌΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ:

Для удобства чтСния адрСса ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΊ 32-Π±ΠΈΡ‚Π½ΠΎΠΌΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ:

Π’Ρ‹Π²ΠΎΠ΄ сокращён для удобства чтСния:

ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ сСкциях ΠΌΠΎΠΆΠ½ΠΎ с использованиСм ΠΊΠΎΠ΄Π° Π½Π° Python ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ LIEF (прСдоставляСт API Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Python):

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ компиляторС

objdump

readelf

Π― Π²Ρ‹Ρ‡ΠΈΡΠ»ΡŽ тСбя по… RPATH

Π­Π»ΡŒΡ„Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΏΡƒΡ‚ΠΈ для поиска динамичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ LD_LIBRARY_PATH ΠΏΠ΅Ρ€Π΅Π΄ запуском прилоТСния, ΠΌΠΎΠΆΠ½ΠΎ просто Β«Π²ΡˆΠΈΡ‚ΡŒΒ» этот ΠΏΡƒΡ‚ΡŒ Π² ELF-Ρ„Π°ΠΉΠ».

И Π±ΡƒΠ΄ΡŒ остороТСн, ΡŽΠ½Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π½Π΅ «спали» свою Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°!

Как появляСтся RPATH?

readelf

Для удобства чтСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ сокращён:

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ LIEF Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ RPATH-запись Π² ΡΠ»ΡŒΡ„Π΅:

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΡΠ»ΡŒΡ„Π° Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

Π‘ΠΊΡ€ΠΈΠΏΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ бСзопасности checksec.sh ΠΎΡ‚ исслСдоватСля Tobias Klein (Π°Π²Ρ‚ΠΎΡ€Π° ΠΊΠ½ΠΈΠ³ΠΈ A Bug Hunter’s Diary) Π½Π΅ обновлялся с 2011 Π³ΠΎΠ΄Π°. Π”Π°Π½Π½Ρ‹ΠΉ скрипт для ELF-Ρ„Π°ΠΉΠ»ΠΎΠ² выполняСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ наличия ΠΎΠΏΡ†ΠΈΠΉ RelRO (Read Only Relocations), NX (Non-Executable Stack), Stack Canaries, PIE (Position Independent Executables) ΠΈ для своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ readelf.

МоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ свой Π°Π½Π°Π»ΠΎΠ³ Π½Π° ΠΊΠΎΠ»Π΅Π½ΠΊΠ΅ Python ΠΈ LIEF (Ρ‡ΡƒΡ‚ΡŒ ΠΊΠΎΡ€ΠΎΡ‡Π΅ прародитСля ΠΈ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ ΠΎΠΏΡ†ΠΈΠΈ separate-code):

Radare2

Бпасибо dukebarman Π·Π° Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ использованию Radare2 для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ checksec:

Β«Π‘Ρ‹Ρ€ΠΎΠΉ ΠΊΠΎΠ΄Β» ΠΈΠ· ΡΠ»ΡŒΡ„Π° (binary from ELF)

Π‘Ρ‹Π²Π°ΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° Β«ΡΠ»ΡŒΡ„ΠΈΠΉΡΠΊΠΈΠ΅ ΠΎΠ΄Ρ‘ΠΆΠΈΒ» Π² Π²ΠΈΠ΄Π΅ ELF-структуры Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹, Π° Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Β«Π³ΠΎΠ»Ρ‹ΠΉΒ» исполняСмый ΠΊΠΎΠ΄ прилоТСния.

objcopy

ИспользованиС objcopy вСроятно Π·Π½Π°ΠΊΠΎΠΌΠΎ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ:

Никакой ΠΌΠ°Π³ΠΈΠΈ. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π²Π·ΡΡ‚ΡŒ содСрТимоС Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… сСкций ΠΈ ΡΠ»Π΅ΠΏΠΈΡ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… Π±ΠΈΠ½Π°Ρ€ΡŒ:

Mangled β€” demangled ΠΈΠΌΠ΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π’ ELF-Π°Ρ…, созданных ΠΈΠ· Π‘++ ΠΊΠΎΠ΄Π°, ΠΈΠΌΠ΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ (ΠΌΠ°Π½Π³Π»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹) для упрощСния поиска ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ класса. Однако Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

Для прСдставлСния ΠΈΠΌΡ‘Π½ Π² ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ nm ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° binutils:

Π’Ρ‹Π²ΠΎΠ΄ ΠΈΠΌΡ‘Π½ символов Π² Π΄Π΅ΠΌΠ°Π½Π³Π»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ LIEF:

Π‘Π±ΠΎΡ€ΠΊΠ°, запись, модификация ΡΠ»ΡŒΡ„Π°

Π­Π»ΡŒΡ„ Π±Π΅Π· ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚Π»Π°ΠΆΠ΅Π½ΠΎ ΠΈ выпускаСтся Π² Π΄ΠΈΠΊΠΈΠΉ ΠΌΠΈΡ€, ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ:

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ символьной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

Бимвольная информация β€” это ΠΈΠΌΠ΅Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π‘Π΅Π· Π½Π΅Ρ‘ рСвСрс прилоТСния Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ услоТняСтся.

strip

Π’ самом простом случаС ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ strip ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° binutils. Для удалСния всСй символьной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

sstrip

Для Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ удалСния символьной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (Π² Ρ‚ΠΎΠΌ числС Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π±Π°ΠΉΡ‚ΠΎΠ² Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„Π°ΠΉΠ»Π°) ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ sstrip ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° ELFkickers. Для удалСния всСй символьной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ сСкций

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅/отсутствиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ сСкций Π½Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ влияния Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ прилоТСния. Но ΠΏΡ€ΠΈ этом Π±Π΅Π· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ сСкций рСвСрс прилоТСния становится Ρ‡ΡƒΡ‚ΡŒ слоТнСС.
Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ LIEF ΠΏΠΎΠ΄ Python ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ удалСния Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ сСкций:

ИзмСнСниС ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ RPATH

chrpath, PatchELF

Для измСнСния RPATH ΠΏΠΎΠ΄ Linux ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌΠΈ chrpath (доступна Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ дистрибутивов) ΠΈΠ»ΠΈ PatchELF.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ELF

ELF Executable Format

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ„Π°ΠΉΠ» ELF?

Π€Π°ΠΉΠ»Ρ‹ ELF ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠ°ΠΊ:

Π€ΠΎΡ€ΠΌΠ°Ρ‚ ELF Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΊΠ°ΠΊ Π³ΠΈΠ±ΠΊΠΈΠΉ, Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΉ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹ΠΉ стандарт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ для Π»ΡŽΠ±Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм ΠΈΠ»ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ. ELF Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ с использованиСм Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ структуры, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» начинаСтся с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Ρ€Π°Π·Π΄Π΅Π» Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ссылки. Бсылки хранятся Π² Π΄Π²ΡƒΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…: Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ELF содСрТит всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, хранящихся Π² Ρ„Π°ΠΉΠ»Π΅, ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΊ Π½ΠΈΠΌ слСдуСт ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Π₯отя стандарт ELF Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ систСм Unix, ΠΎΠ½ Π±Ρ‹Π» быстро Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ систСмам, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Π΅ консоли (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Wii, PlayStation, PowerPC) ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ систСмам. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ELF Π½Π΅ читаСтся Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ, ΠΈ Ρ‚Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» Π½Π΅ слСдуСт ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ тСкстовых Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ этот Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ELF Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°

НиТС Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для открытия Ρ„Π°ΠΉΠ»ΠΎΠ² ELF, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π½Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ 3 Π² соотвСтствии с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ систСмной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ. ELF Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° всСх систСмных ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅, Π½ΠΎ Π½Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ» ELF

Как ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ELF?

ΠŸΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ² ELF Π² Π΄Π°Π½Π½ΠΎΠΉ систСмС, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько. Π§Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, всС распространСнныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, связанныС с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ ELF, ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ сами ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ. ΠŸΡ€ΠΎΡ†Π΅ΡΡ быстрый ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ участия ИВ-спСциалиста. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ список ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Ρ‚ вас Ρ‡Π΅Ρ€Π΅Π· процСсс Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ возникшСй ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Π¨Π°Π³ 1. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Dolphin

Π¨Π°Π³ 2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ Dolphin ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΡ€ΠΈ нСобходимости

Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π€ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elfЕсли Ρƒ вас ΡƒΠΆΠ΅ установлСн Dolphin Π² Π²Π°ΡˆΠΈΡ… систСмах ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ ELF ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, установлСна Π»ΠΈ Ρƒ вас послСдняя вСрсия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π±ΠΎΠ»Π΅Π΅ соврСмСнных Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Ρ… вСрсиях своих ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ². ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Dolphin Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ с ELF, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС устарСло. ВсС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСкрасно ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ вСрсиями Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Dolphin.

Π¨Π°Π³ 3. ΠΠ°Π·Π½Π°Ρ‡ΡŒΡ‚Π΅ Dolphin для ELF Ρ„Π°ΠΉΠ»ΠΎΠ²

Если Ρƒ вас установлСна послСдняя вСрсия Dolphin ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° сохраняСтся, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π΅Π΅ Π² качСствС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для управлСния ELF Π½Π° вашСм устройствС. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° проста ΠΈ Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни Π½Π΅ зависит ΠΎΡ‚ систСмы

Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π€ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° измСнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Windows

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° измСнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Mac OS

Π¨Π°Π³ 4. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» ELF Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ ΠΈ Π½Π΅ содСрТит ошибок

Π’Ρ‹ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ слСдили Π·Π° шагами, пСрСчислСнными Π² ΠΏΡƒΠ½ΠΊΡ‚Π°Ρ… 1-3, Π½ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° всС Π΅Ρ‰Π΅ присутствуСт? Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ Ρ„Π°ΠΉΠ» ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ELF Ρ„Π°ΠΉΠ»ΠΎΠΌ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ.

Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π€ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf

Если случится Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ELF ΠΈΠ½Ρ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ вирусом, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ, которая ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ доступ. НСмСдлСнно просканируйтС Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ антивирусного инструмСнта ΠΈΠ»ΠΈ просмотритС всю систСму, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ вся систСма бСзопасна. Если сканСр ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» ELF нСбСзопасСн, дСйствуйтС Π² соотвСтствии с инструкциями антивирусной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡƒΠ³Ρ€ΠΎΠ·Ρ‹.

2. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ структура Ρ„Π°ΠΉΠ»Π° ELF Π½Π΅ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π°

Если Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ELF ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Π»ΠΈΡ†Π°, попроситС Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Π°ΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ копию. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Π½Π΅ Π±Ρ‹Π» Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ скопирован Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ являСтся Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΈ поэтому Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚. ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„Π°ΠΉΠ»Π° с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ ELF ΠΈΠ· Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ошибка, приводящая ΠΊ Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π΅Ρ‰Π΅ Ρ€Π°Π·.

3. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²Π° доступа

БущСствуСт Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ с достаточными систСмными привилСгиями. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° ΡƒΡ‡Π΅Ρ‚Π½ΡƒΡŽ запись с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ привилСгиями ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ снова ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ELF Executable Format.

4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ваша систСма ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Dolphin

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ достаточно свободных рСсурсов для запуска прилоТСния, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ ELF. Π—Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ всС Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ELF.

5. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρƒ вас послСдниС обновлСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ²

БоврСмСнная систСма ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ ваш ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Π±ΠΎΠ»Π΅Π΅ бСзопасным, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Ρ„Π°ΠΉΠ»ΠΎΠΌ ELF Executable Format. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· доступных ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ систСмы ΠΈΠ»ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ELF, Π²Π»ΠΈΡΡŽΡ‰ΠΈΠΌΠΈ Π½Π° Π±ΠΎΠ»Π΅Π΅ старыС вСрсии Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΌΠΎΡ‡ΡŒ?

Если Ρƒ Вас Π΅ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ELF ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹, Ссли Π’Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ Сю с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ нашСго сайта. Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ формуляром, находящимся здСсь ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ Π½Π°ΠΌ свою ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π΅ ELF.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ELF-Ρ„Π°ΠΉΠ» с ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ (DWARF) Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ (для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² ARM)

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π‘ Π½Π΅Π΄Π°Π²Π½Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ я увлСкся ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°ΠΌΠΈ. Π‘Π½Π°Ρ‡Π°Π»Π° AVR, Π·Π°Ρ‚Π΅ΠΌ ARM. Для программирования ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² сущСствуСт Π΄Π²Π° основных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°: ассСмблСр ΠΈ Π‘. Однако, я Ρ„Π°Π½Π°Ρ‚ языка программирования Π€ΠΎΡ€Ρ‚ ΠΈ занялся ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ Π½Π° эти ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π½ΠΎ Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ Π±Ρ‹Π»ΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ я Ρ…ΠΎΡ‚Π΅Π»: ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ gdb. И я задался Ρ†Π΅Π»ΡŒΡŽ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ этот ΠΏΡ€ΠΎΠ±Π΅Π» (ΠΏΠΎΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ARM). Π’ ΠΌΠΎΠ΅ΠΌ распоряТСнии Π±Ρ‹Π»Π° ΠΏΠ»Π°Ρ‚Π° stm32vldiscovery с 32-Π±ΠΈΡ‚Π½Ρ‹ΠΌ процСссором ARM Cortex-M3, 128ΠΊΠ‘ flash ΠΈ 8 ΠΊΠ‘ RAM, поэтому я ΠΈ Π½Π°Ρ‡Π°Π» с Π½Π΅Π΅.
Писал я кросс-транслятор Π€ΠΎΡ€Ρ‚Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Π½Π° Π€ΠΎΡ€Ρ‚Π΅, ΠΈ ΠΊΠΎΠ΄Π° Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ этот язык считаСтся экзотичСским. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΡƒΡΡŒ достаточно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌΠΈ рСкомСндациями. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² сСти ΠΏΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρƒ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅Ρ‚, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Π»ΠΈΡΡŒ ΠΌΠ½ΠΎΠΉ ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ± ΠΈ ошибок, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ β€” ΠΏΡƒΡ‚Π΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π° Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² компилятора gcc. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, я использовал Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½Π΅ касаясь, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, relocation-ΠΎΠ² ΠΈ мноТСства Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ. Π’Π΅ΠΌΠ° ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ±ΡˆΠΈΡ€Π½Π° ΠΈ, ΠΏΡ€ΠΈΠ·Π½Π°ΡŽΡΡŒ, разобрался я с Π½Π΅ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ² Π½Π° 30, Ρ‡Ρ‚ΠΎ оказалось для мСня достаточным.

Кого заинтСрСсуСт этот ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ здСсь.

ΠžΠ±Π·ΠΎΡ€ ELF

1. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (ELF Header)
2. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Program Header Table)
3. Π‘Π΅ΠΊΡ†ΠΈΠΈ

Π‘Π΅ΠΊΡ†ΠΈΠΈ содСрТат всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Ρ„Π°ΠΉΠ»Π΅ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π΄Π°Π½Π½Ρ‹Π΅, отладочная информация ΠΈ Ρ‚.Π΄)
Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сСкции Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ, имя ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Π’ сСкции «.text» ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ хранится ΠΊΠΎΠ΄, Π² «.symtab» β€” Ρ‚Π°Π±Π»ΠΈΡ†Π° символов ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…), Π² «.strtab» β€” Ρ‚Π°Π±Π»ΠΈΡ†Π° строк, Π² сСкциях с прСфиксом «.debug_» β€” отладочная информация ΠΈ Ρ‚.Π΄. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² Ρ„Π°ΠΉΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ пустая сСкция с индСксом 0.

4. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ сСкций (Section Header Table)

Π­Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π°, содСрТащая массив Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² сСкций.
Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ рассматриваСтся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ELF.

ΠžΠ±Π·ΠΎΡ€ DWARF

Π£Π·Π»Ρ‹, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅:
Π£Π·Π»Ρ‹, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ΄:
Другая информация:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ELF

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ libelf

Π‘Π½Π°Ρ‡Π°Π»Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ elf_version(EV_CURRENT) ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Если ΠΎΠ½ Ρ€Π°Π²Π΅Π½ EV_NONE β€” Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка ΠΈ дальнСйшиС дСйствия ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ нСльзя. Π—Π°Ρ‚Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π½Π°ΠΌ Ρ„Π°ΠΉΠ» Π½Π° дискС, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ дСскриптор ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ elf_begin:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°

Новый Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„Π°ΠΉΠ»Π° создаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ elf32_newehdr:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Program Header Table) β€” это Ρ‚Π°Π±Π»ΠΈΡ†Π° соотвСтствия сСкций Ρ„Π°ΠΉΠ»Π° сСгмСнтам памяти, которая ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΡƒ, ΠΊΡƒΠ΄Π° ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΡΠ΅ΠΊΡ†ΠΈΡŽ. Π—Π°Π³ΠΎΠΎΠ²ΠΎΠΊ создаСтся ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ elf32_newphdr:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ сСкций

ПослС создания Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ созданию сСкций. ΠŸΡƒΡΡ‚Π°Ρ сСкция создаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ elf_newscn:

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ сСкции

БСкция содСрТит описаниС всСх символов (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ описаны. Она состоит ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… элСмСнтов Π΄Π»ΠΈΠ½ΠΎΠΉ ΠΏΠΎ 16 Π±Π°ΠΉΡ‚:

Π’Π°Π±Π»ΠΈΡ†Ρ‹ строк

Π’Π°Π±Π»ΠΈΡ†Ρ‹ строк содСрТат ΠΈΠ΄ΡƒΡ‰ΠΈΠ΅ подряд строки, ΠΎΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π°ΠΉΡ‚ Π² этой Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ 0. ИндСкс строки Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ β€” это просто смСщСниС Π² Π±Π°ΠΉΡ‚Π°Ρ… ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, пСрвая строка ‘name’ ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 1, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка ‘var’ ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 6.

Π—Π°ΠΏΠΈΡΡŒ Ρ„Π°ΠΉΠ»Π°

Π˜Ρ‚Π°ΠΊ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ сСкции ΡƒΠΆΠ΅ сформированы, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ» ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с libelf. Π—Π°ΠΏΠΈΡΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ функция elf_update:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ DWARF

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ libdwarf producer
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π£Π·Π»ΠΎΠ² (DIE β€” Debugging Information Entry)
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΡƒΠ·Π»Π°

Для создания Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΡƒΠ·Π»Π° Π΅ΡΡ‚ΡŒ Ρ†Π΅Π»ΠΎΠ΅ сСмСйство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ dwarf_add_AT_Ρ…Ρ…Ρ…Ρ…. Иногда ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ я Π΄Π°ΠΆΠ΅ нСсколько Ρ€Π°Π· копался Π² исходном ΠΊΠΎΠ΄Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. НСкоторыС ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±ΡƒΠ΄ΡƒΡ‚ описаны здСсь, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΆΠ΅ β€” Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…. ВсС ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ownerdie β€” дСскриптор ΡƒΠ·Π»Π°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΊΠΎΠ΄ ошибки Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ error.
Ѐункция dwarf_add_AT_name добавляСт ΠΊ ΡƒΠ·Π»Ρƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ «имя» (DW_AT_name). Π£ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΡƒΠ·Π»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ имя (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρƒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, констант), Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρƒ Compilation Unit)

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π•Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΠΈ (Compilation Unit)

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

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Π³Π»Π°Π²Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅

Для хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π³Π»Π°Π²Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ «имя» (DW_AT_name), примСняйтС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ dwarf_add_AT_name, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΡƒΠ·Π»Π°Β».

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ компиляторС

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ dwarf_add_AT_producer:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Common Information Entry
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ символа ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡƒΠ·Π»Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ FDE ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

Ѐункция Π²Π΅Ρ€Π½Π΅Ρ‚ дСскриптор Π½ΠΎΠ²ΠΎΠ³ΠΎ FDE ΠΈΠ»ΠΈ DW_DLV_BADADDR ΠΏΡ€ΠΈ ошибкС.
ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ FDE ΠΊ списку ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ dwarf_add_frame_fde:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ созданию ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, см. Β«Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ констант»

CΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π°Ρ… строк
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ констант

Для добавлСния инструкций Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ dwarf_add_expr_gen:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ сСкций с ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ

ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ Π½Π°ΠΌΠΈ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, Π½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ записываСт Π½Π° диск. Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ Π½Π°ΠΌ количСство созданных elf-сСкций ΠΈΠ»ΠΈ DW_DLV_NOCOUNT ΠΏΡ€ΠΈ ошибкС. ΠŸΡ€ΠΈ этом для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сСкции Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° callback-функция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ dwarf_producer_init_c. Π­Ρ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΡ‹ сами. Π•Π΅ спСцификация такая:

ΠžΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ

ПослС формирования сСкций ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с libdwarf Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ dwarf_producer_finish:

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ DW_DLV_NOCOUNT ΠΏΡ€ΠΈ ошибкС.
Π—Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ запись Π½Π° диск Π½Π° этом этапС Π½Π΅ производится. Π—Π°ΠΏΠΈΡΡŒ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ посрСдством Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»Π° Β«Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ELF β€” Π—Π°ΠΏΠΈΡΡŒ Ρ„Π°ΠΉΠ»Π°Β».

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

На этом всС.
ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡŽΡΡŒ, созданиС ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ β€” Ρ‚Π΅ΠΌΠ° ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ±ΡˆΠΈΡ€Π½Π°Ρ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ‚Π΅ΠΌ я Π½Π΅ коснулся, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠΎΡ‚ΠΊΡ€Ρ‹Π² завСсу. Π–Π΅Π»Π°ΡŽΡ‰ΠΈΠ΅ ΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π΄ΠΎ бСсконСчности.
Если Ρƒ вас Π±ΡƒΠ΄ΡƒΡ‚ вопросы β€” ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ Π½Π° Π½ΠΈΡ… ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π€Π°ΠΉΠ»Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ELF ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ. БущСствуСт 3 Ρ‚ΠΈΠΏΠ° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² ELF, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… открываСтся Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ описания Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ скачайтС ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π§Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ELF

Π€ΠΎΡ€ΠΌΠ°Ρ‚ исполняСмого Ρ„Π°ΠΉΠ»Π°, примСняСмого Nintendo Wii β€” ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½ΡƒΡŽ Π²ΠΈΠ΄Π΅ΠΎ-ΠΈΠ³Ρ€, Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Nintendo Π² ноябрС 2006 Π³ΠΎΠ΄Π°. ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒΡΡ Π½Π° ПК ΠΈ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° Dolphin Emulator.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: «Π΄ΠΎΠΌΠΎΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹Π΅» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Wii, созданныС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Π°Ρ… ELF. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ Π½Π° консоль Wii с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SD-ΠΊΠ°Ρ€Ρ‚Ρ‹.

Π§Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ELF (Nintendo Wii Game File)

БистСмный Ρ„Π°ΠΉΠ», создаваСмый Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Executable and Linkable Format (ELF), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅ΠΆΠ΄Π΅ Π±Ρ‹Π» извСстСн ΠΊΠ°ΠΊ «Extensible Linking Format». ΠœΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ исполняСмыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹,Π΄Π°ΠΌΠΏ памяти ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ доступа.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ ELF являСтся стандартным Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ Ρ„Π°ΠΉΠ»Π°, примСняСмым Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… основанных Π½Π° Unix систСмах.

Π§Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ELF (Executable and Linkable Format File)

Π€Π°ΠΉΠ», примСняСмый ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ систСмами PlayStation, PlayStation 2, PlayStation 3 ΠΈ PlayStation Portable (PSP). Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ содСрТимого с диска Π²ΠΈΠ΄Π΅ΠΎ-ΠΈΠ³Ρ€Ρ‹. Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ³Ρ€Ρ‹, ΠΊΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΎΠ±Ρ‰Π΅Π³ΠΎ доступа ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅.

Π€Π°ΠΉΠ»Ρ‹ ELF ΠΈΠ½ΠΎΠ³Π΄Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ для измСнСния процСсса ΠΈΠ³Ρ€Ρ‹ PlayStation.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ρ„Π°ΠΉΠ»Ρ‹ PlayStation ELF ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ «Executable and Linkable Format», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся стандартным Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ Ρ„Π°ΠΉΠ»Π°, примСняСмым Π½Π° систСмах Unix.

Π§Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ELF (PlayStation Executable File)

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ELF-Ρ„Π°ΠΉΠ»Ρ‹ Π² Linux: ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ Π°Π½Π°Π»ΠΈΠ·

Π•ΡΡ‚ΡŒ Π² ΠΌΠΈΡ€Π΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ°ΠΊ Π½Π΅Ρ‡Ρ‚ΠΎ само собой Ρ€Π°Π·ΡƒΠΌΠ΅ΡŽΡ‰Π΅Π΅ΡΡ, хотя ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ истинными ΡˆΠ΅Π΄Π΅Π²Ρ€Π°ΠΌΠΈ. Одними ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Linux, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ ls ΠΈ ps. Π₯отя ΠΎΠ½ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ простыС, это оказываСтся Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Ρ‚Π°ΠΊ, Ссли ΠΌΡ‹ заглянСм Π²Π½ΡƒΡ‚Ρ€ΡŒ. И Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ оказываСтся ELF, Executable and Linkable Format. Π€ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ повсСмСстно, Π½ΠΎ ΠΌΠ°Π»ΠΎ ΠΊΡ‚ΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚. Π­Ρ‚ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ руководство ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ понимания.

Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π€ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf

ΠŸΡ€ΠΎΡ‡Ρ‚Ρ это руководство, Π²Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅:

Π§Ρ‚ΠΎ прСдставляСт собой Ρ„Π°ΠΉΠ» ELF?

ELF β€” это сокращСниС ΠΎΡ‚ Executable and Linkable Format (Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ исполняСмых ΠΈ связываСмых Ρ„Π°ΠΉΠ»ΠΎΠ²) ΠΈ опрСдСляСт структуру Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ядра (core files). БпСцификация Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° позволяСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ содСрТащиСся Π² Ρ„Π°ΠΉΠ»Π΅ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π€Π°ΠΉΠ» ELF, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, являСтся Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ компилятора ΠΈΠ»ΠΈ Π»ΠΈΠ½ΠΊΠ΅Ρ€Π° ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ подходящих инструмСнтов ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½.

Π—Π°Ρ‡Π΅ΠΌ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ELF Π² подробностях?

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π² тСхничСскиС Π΄Π΅Ρ‚Π°Π»ΠΈ, Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ лишним ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ELF ΠΏΠΎΠ»Π΅Π·Π½ΠΎ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это позволяСт ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Когда Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ, эти знания ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, ΠΈ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅. Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ изучСния ELF-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π½Π½Π° для поиска Π΄Ρ‹Ρ€ Π² бСзопасности ΠΈ обнаруТСния ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ понимания процСсса Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π½Π° высокоуровнСвом языкС Ρ‚ΠΈΠΏΠ° Go, Π²Ρ‹ всё Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит Π·Π° сцСной.

Π˜Ρ‚Π°ΠΊ, Π·Π°Ρ‡Π΅ΠΌ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ELF?

ΠžΡ‚ исходника ΠΊ процСссу

ΠšΠ°ΠΊΡƒΡŽ Π±Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму ΠΌΡ‹ Π½Π΅ использовали, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ исходного ΠΊΠΎΠ΄Π° Π½Π° язык CPU β€” ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ самыми Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π½Π° дискС ΠΈΠ»ΠΈ вывСсти Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π° экран. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ язык CPU, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ язык программирования, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π·Π°Ρ‚Π΅ΠΌ транслируСт эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π·Π°Ρ‚Π΅ΠΌ линкуСтся Π² ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΡƒΡ‚Ρ‘ΠΌ использования Π»ΠΈΠ½ΠΊΠ΅Ρ€Π°. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ являСтся Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅ CPU.

ΠŸΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ

Π­Ρ‚ΠΎΡ‚ пост содСрТит мноТСство ΠΊΠΎΠΌΠ°Π½Π΄. Π›ΡƒΡ‡ΡˆΠ΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΡ… Π½Π° тСстовой машинС. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½Π° Π½ΠΈΡ… эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ напишСм ΠΌΠ°Π»Π΅Π½ΡŒΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Π‘, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅, ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° β€” Π»ΡƒΡ‡ΡˆΠΈΠΉ способ Ρ‡Π΅ΠΌΡƒ-Π»ΠΈΠ±ΠΎ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ.

Анатомия ELF-Ρ„Π°ΠΉΠ»Π°

Распространённым Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ ELF ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΈΠ»ΠΈ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ². ΠœΡ‹ ΡƒΠΆΠ΅ сказали, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для частСй исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°). Π”Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ Π΄Π°ΠΌΠΏΡ‹ ядра (core-Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ a.out Ρ„Π°ΠΉΠ»Ρ‹). БпСцификация ELF Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Linux для ядра ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ядра.

Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π€ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°

Π’ силу Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΠΈ ELF-Ρ„Π°ΠΉΠ»ΠΎΠ², структура ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². ELF-Ρ„Π°ΠΉΠ» состоит ΠΈΠ·:

Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π€ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf

Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ELF

Как Π²ΠΈΠ΄Π½ΠΎ Π½Π° ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ELF начинаСтся с «магичСского числа». Π­Ρ‚ΠΎ «магичСскоС число» Π΄Π°Ρ‘Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π΅. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ 4 Π±Π°ΠΉΡ‚Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, Ρ‡Ρ‚ΠΎ это ELF-Ρ„Π°ΠΉΠ» (45=E,4c=L,46=F, ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌΠΈ стоит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 7f).

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ELF являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Он Π½ΡƒΠΆΠ΅Π½ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΏΡ€ΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ΅ ΠΈ исполнСнии. Для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ понимания Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ELF-Ρ„Π°ΠΉΠ»Π°, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ, для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ эта информация.

Класс

ПослС объявлСния Ρ‚ΠΈΠΏΠ° ELF, слСдуСт ΠΏΠΎΠ»Π΅ класса. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Ρ„Π°ΠΉΠ». Оно ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π²Π½ΡΡ‚ΡŒΡΡ 01 (32-битная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°) ΠΈΠ»ΠΈ 02 (64-битная). Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ 02, Ρ‡Ρ‚ΠΎ пСрСводится ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ readelf ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ» ELF64, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, этот Ρ„Π°ΠΉΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ 64-Π±ΠΈΡ‚Π½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ. Π­Ρ‚ΠΎ Π½Π΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π² ΠΌΠΎΠ΅ΠΉ машинС установлСн соврСмСнный процСссор.

Π”Π°Π½Π½Ρ‹Π΅

Π”Π°Π»Π΅Π΅ ΠΈΠ΄Ρ‘Ρ‚ ΠΏΠΎΠ»Π΅ Β«Π΄Π°Π½Π½Ρ‹Π΅Β», ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°: 01 β€” LSB (Least Significant Bit), Ρ‚Π°ΠΊΠΆΠ΅ извСстноС ΠΊΠ°ΠΊ little-endian, Π»ΠΈΠ±ΠΎ 02 β€” MSB (Most Significant Bit, big-endian). Π­Ρ‚ΠΈ значСния ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Ρ„Π°ΠΉΠ»Π΅. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ процСссоров ΠΏΠΎ Ρ€Π°Π·Π½ΠΎΠΌΡƒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ структуры Π΄Π°Π½Π½Ρ‹Ρ…. Π’ нашСм случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ LSB, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ процСссор ΠΈΠΌΠ΅Π΅Ρ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ AMD64.

Π­Ρ„Ρ„Π΅ΠΊΡ‚ LSB становится Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ ΠΏΡ€ΠΈ использовании ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ hexdump Π½Π° Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ELF для /bin/ps.

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, ΠΈΠ·-Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ порядка Π΄Π°Π½Π½Ρ‹Ρ….

ВСрсия

Π—Π°Ρ‚Π΅ΠΌ слСдуСт Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ магичСской Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«01Β», ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ собой Π½ΠΎΠΌΠ΅Ρ€ вСрсии. Π’ настоящСС врСмя имССтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вСрсия 01, поэтому это число Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ интСрСсного.

OS/ABI

КаТдая опСрационная систСма ΠΈΠΌΠ΅Π΅Ρ‚ свой способ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ, Π½ΠΎ, Π²Π΄ΠΎΠ±Π°Π²ΠΎΠΊ, каТдая систСма, ΠΈΠΌΠ΅Π΅Ρ‚ нСбольшиС различия. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ опрСдСляСтся Β«Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌ интСрфСйсом прилоТСния» Application Binary Interface (ABI). Поля OS/ABI ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚, ΠΊΠ°ΠΊΠΎΠΉ ABI ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΈ Π΅Π³ΠΎ Π²Π΅Ρ€ΡΠΈΡŽ. Π’ нашСм случаС, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ 00, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ спСцифичСскиС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Π’ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… это ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊ System V.

ВСрсия ABI

ΠŸΡ€ΠΈ нСобходимости, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π° вСрсия ABI.

Машина

Π’Π°ΠΊΠΆΠ΅ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ указываСтся ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ (AMD64).

ПолС Ρ‚ΠΈΠΏΠ° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, для Ρ‡Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Ρ„Π°ΠΉΠ». Π’ΠΎΡ‚ нСсколько часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ‚ΠΈΠΏΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ².

CORE (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 4)
DYN (Shared object file), Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 3)
EXEC (Executable file), исполняСмый Ρ„Π°ΠΉΠ» (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2)
REL (Relocatable file), Ρ„Π°ΠΉΠ» Π΄ΠΎ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1)

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ

Π₯отя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ поля ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ просмотрСны Ρ‡Π΅Ρ€Π΅Π· readelf, ΠΈΡ… Π½Π° самом Π΄Π΅Π»Π΅ большС. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, для ΠΊΠ°ΠΊΠΎΠ³ΠΎ процСссора ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Ρ„Π°ΠΉΠ». Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ hexdump, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ELF ΠΈ всС значСния.

Π’Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ опрСдСляСт Ρ‚ΠΈΠΏ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 3e β€” это дСсятичноС 62, Ρ‡Ρ‚ΠΎ соотвСтствуСт AMD64. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прСдставлСниС ΠΎΠ±ΠΎ всСх Ρ‚ΠΈΠΏΠ°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², посмотритС этот Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

Π₯отя Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ всё это Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΠΈΡ€ΠΈΡ‡Π½ΠΎΠΌ Π΄Π°ΠΌΠΏΠ΅, ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сдСлаСт Ρ€Π°Π±ΠΎΡ‚Ρƒ Π·Π° вас. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° dumpelf ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π°. Она ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡƒ ELF. Π₯ΠΎΡ€ΠΎΡˆΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ поля ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, ΠΈ ΠΊΠ°ΠΊΠΎΠ²Ρ‹ ΠΈΡ… Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ значСния.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠ³Π΄Π° ΠΌΡ‹ объяснили значСния этих ΠΏΠΎΠ»Π΅ΠΉ, врСмя ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Ρ‚ΠΎ, какая Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ магия Π·Π° Π½ΠΈΠΌΠΈ стоит, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌ!

Π”Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Π°

Помимо Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, Ρ„Π°ΠΉΠ»Ρ‹ ELF состоят ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… частСй.

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π€Π°ΠΉΠ» ELF состоит ΠΈΠ· нуля ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ сСгмСнтов, ΠΈ описываСт, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ процСсс, ΠΎΠ±Ρ€Π°Π· памяти для исполнСния Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅. Когда ядро Π²ΠΈΠ΄ΠΈΡ‚ эти сСгмСнты, ΠΎΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΈΡ… Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ адрСсном пространствС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ систСмный Π²Ρ‹Π·ΠΎΠ² mmap(2). Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ инструкции Π² ΠΎΠ±Ρ€Π°Π· Π² памяти. Если ELF-Ρ„Π°ΠΉΠ» являСтся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΎΠΌ, ΠΎΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ эти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ½ просто Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π­Ρ‚ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, вмСстС с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ…, для формирования процСсса. Для раздСляСмых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (shared libraries) процСсс ΠΏΠΎΡ…ΠΎΠΆ.

Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf. Π€ΠΎΡ‚ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» elf
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ ELF-Ρ„Π°ΠΉΠ»Π΅

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 9 ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ². Π‘Π½Π°Ρ‡Π°Π»Π° Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚. Π”Π°Π²Π°ΠΉΡ‚Π΅ погрузимся Π² подробности.

GNU_EH_FRAME

Π­Ρ‚ΠΎ сортированная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ компилятором GCC. Π’ Π½Π΅ΠΉ хранятся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Если Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ, ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ.

GNU_STACK

Π­Ρ‚ΠΎΡ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сохранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ стСкС. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ стСк Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ исполняСмым, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»Π΅Ρ‡ΡŒ Π·Π° собой уязвимости бСзопасности.

Если сСгмСнт GNU_STACK отсутствуСт, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ исполняСмый стСк. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρ‹ scanelf ΠΈ execstack ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Π΅Ρ‚Π°Π»ΠΈ устройства стСка.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ для просмотра ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°:

Π‘Π΅ΠΊΡ†ΠΈΠΈ ELF

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ сСкции

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ сСкции ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ всС сСкции Ρ„Π°ΠΉΠ»Π°. Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, эта информация ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ ΠΈ Ρ€Π΅Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ.

Π‘Π΅ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² ELF-Ρ„Π°ΠΉΠ»Π΅ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ компилятор GNU C ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ Π‘ Π² ассСмблСр, ΠΈ ассСмблСр GNU создаёт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ исполняСмый ΠΊΠΎΠ΄. Он Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½ Π² сСгмСнт с ΠΏΡ€Π°Π²Π°ΠΌΠΈ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ Π½Π° исполнСниС. Он загруТаСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΈ Π΅Π³ΠΎ содСрТаниС Π½Π΅ измСняСтся. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ objdump.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, с ΠΏΡ€Π°Π²Π°ΠΌΠΈ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись.

.rodata

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, с ΠΏΡ€Π°Π²Π°ΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅. (=A).

НСинициализированныС Π΄Π°Π½Π½Ρ‹Π΅, с ΠΏΡ€Π°Π²Π°ΠΌΠΈ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅/запись. (=WA)

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ для просмотра сСкций ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ².

Π“Ρ€ΡƒΠΏΠΏΡ‹ сСкций

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

Π₯отя это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ слишком интСрСсным, большиС прСимущСства Π΄Π°Ρ‘Ρ‚ Π·Π½Π°Π½ΠΈΠ΅ инструмСнтов Π°Π½Π°Π»ΠΈΠ·Π° ELF-Ρ„Π°ΠΉΠ»ΠΎΠ². По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, ΠΎΠ±Π·ΠΎΡ€ этих инструмСнтов ΠΈ ΠΈΡ… назначСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ Π² ΠΊΠΎΠ½Ρ†Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

БтатичСскиС ΠΈ динамичСскиС Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹

Когда ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ELF, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π»ΠΈΠ½ΠΊΡƒΡŽΡ‚ΡΡ эти Π΄Π²Π° Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»ΠΎΠ². Они ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ статичСскими ΠΈ динамичСскими, ΠΈ это относится ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚. Если Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ «динамичСский», это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ внСшниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, содСрТащиС ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΈΠΏΠ° открытия Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ создания сСтСвого сокСта. БтатичСскиС Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΈ, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ Ρ„Π°ΠΉΠ» статичСским ΠΈΠ»ΠΈ динамичСским, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ file. Она ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ внСшниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹, просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ldd Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠ΅:

Π‘ΠΎΠ²Π΅Ρ‚: Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ дальнСйшиС зависимости, Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ lddtree.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ELF-Ρ„Π°ΠΉΠ»Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ сначала ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ инструмСнты. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΡƒΠ»ΠΊΠΈΡ‚Ρ‹ для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΎΠ² ΠΈ исполняСмого ΠΊΠΎΠ΄Π°. Если Π²Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² Π°Π½Π°Π»ΠΈΠ·Π΅ ELF-Ρ„Π°ΠΉΠ»ΠΎΠ², Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ со статичСского Π°Π½Π°Π»ΠΈΠ·Π°. БтатичСский Π°Π½Π°Π»ΠΈΠ· ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ исслСдуСм Ρ„Π°ΠΉΠ»Ρ‹ Π±Π΅Π· ΠΈΡ… запуска. Когда Π²Ρ‹ Π½Π°Ρ‡Π½Ρ‘Ρ‚Π΅ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ динамичСскому Π°Π½Π°Π»ΠΈΠ·Ρƒ. ЗапускайтС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈ смотритС Π½Π° ΠΈΡ… Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅ инструмСнты

Radare2

Π’ΡƒΠ»ΠΊΠΈΡ‚ Radare2 создан Π‘Π΅Ρ€Π΄ΠΆΠΈ ΠΠ»ΡŒΠ²Π°Ρ€Π΅ΡΠΎΠΌ (Sergi Alvarez). Число 2 ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π±Ρ‹Π» ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ пСрСписан ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсиСй. БСйчас ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ исслСдоватСлями, для изучСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Linux-систСм ΠΈΠΌΠ΅ΡŽΡ‚ установлСнный ΠΏΠ°ΠΊΠ΅Ρ‚ binutils. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΡƒΠ»ΠΊΠΈΡ‚ упростит Π²Π°ΡˆΡƒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, особСнно Ссли Π²Ρ‹ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚Π΅ΡΡŒ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ ELF-Ρ„Π°ΠΉΠ»ΠΎΠ². Π― собрал здСсь список ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ для Π°Π½Π°Π»ΠΈΠ·Π° ELF-Ρ„Π°ΠΉΠ»ΠΎΠ².

elfutils
/usr/bin/eu-addr2line
/usr/bin/eu-ar – Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° ar, для создания ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π°Ρ€Ρ…ΠΈΠ²Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²
/usr/bin/eu-elfcmp
/usr/bin/eu-elflint – ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° соотвСтствиС спСцификациям gABI ΠΈ psABI
/usr/bin/eu-findtextrel – поиск Ρ€Π΅Π»ΠΎΠΊΠ°Ρ†ΠΈΠΉ тСкста
/usr/bin/eu-ld – ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΈ Π°Ρ€Ρ…ΠΈΠ²Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹
/usr/bin/eu-make-debug-archive
/usr/bin/eu-nm – ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ символы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΈ исполняСмого Ρ„Π°ΠΉΠ»ΠΎΠ²
/usr/bin/eu-objdump – ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°
/usr/bin/eu-ranlib – создаёт индСкс Π°Ρ€Ρ…ΠΈΠ²Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²
/usr/bin/eu-readelf – ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ELF-Ρ„Π°ΠΉΠ» Π² Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅
/usr/bin/eu-size – ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сСкции (text, data, bss, etc)
/usr/bin/eu-stack – ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ стСк Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ процСсса ΠΈΠ»ΠΈ Π΄Π°ΠΌΠΏΠ° ядра
/usr/bin/eu-strings – ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ тСкстовыС строки (ΠΊΠ°ΠΊ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° strings)
/usr/bin/eu-strip – удаляСт Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ символов ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ELF
/usr/bin/eu-unstrip – добавляСт символы ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ
ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΏΠ°ΠΊΠ΅Ρ‚ elfutils Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Π½Π°Ρ‡Π°Π»ΠΎΠΌ, ΠΎΠ½ содСрТит Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ для Π°Π½Π°Π»ΠΈΠ·Π°

elfkickers
/usr/bin/ebfc – компилятор языка Brainfuck
/usr/bin/elfls – ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ сСкций с Ρ„Π»Π°Π³Π°ΠΌΠΈ
/usr/bin/elftoc – ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Π‘
/usr/bin/infect – ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°, ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Π΄Ρ€ΠΎΠΏΠΏΠ΅Ρ€, создаёт Ρ„Π°ΠΉΠ» setuid Π² /tmp
/usr/bin/objres – создаёт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…
/usr/bin/rebind – измСняСт связываниС ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ символов Π² ELF-Ρ„Π°ΠΉΠ»Π°Ρ…
/usr/bin/sstrip – удаляСт Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈΠ· ELF-Ρ„Π°ΠΉΠ»Π°
ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π°Π²Ρ‚ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ELFKickers сфокусирован Π½Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ELF-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎ позволяСт Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Β«Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈΒ» ELF-Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠ°ΠΌΠΈ

pax-utils
/usr/bin/dumpelf – Π΄Π°ΠΌΠΏ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры ELF
/usr/bin/lddtree – ΠΊΠ°ΠΊ ldd, с установкой уровня ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… зависимостСй
/usr/bin/pspax – Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ELF/PaX ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… процСссах
/usr/bin/scanelf – ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ подробности PaX
/usr/bin/scanmacho – ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ подробности Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΎΠ² Mach-O (Mac OS X)
/usr/bin/symtree – ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ символы Π² Π²ΠΈΠ΄Π΅ Π΄Π΅Ρ€Π΅Π²Π°
ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Π² этом ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΌΠΎΠ³ΡƒΡ‚ рСкурсивно ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, ΠΈ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ для Π°Π½Π°Π»ΠΈΠ·Π° всСго содСрТимого Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ. Ѐокус сдСлан Π½Π° инструмСнтах для исслСдования подробностСй PaX. Помимо ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ELF, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· Mach-O-Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΎΠ².

prelink
/usr/bin/execstack – ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, являСтся Π»ΠΈ стСк исполняСмым
/usr/bin/prelink – Ρ€Π΅Π»ΠΎΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π² ELF Ρ„Π°ΠΉΠ»Π°Ρ…, для ускорСния процСсса

Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ABI?

ABI β€” это Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Application Binary Interface) ΠΈ опрСдСляСт, Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ интСрфСйс ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой ΠΈ исполняСмым ΠΊΠΎΠ΄ΠΎΠΌ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ELF?

ELF β€” это Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹ΠΉ ΠΈ БвязываСмый Π€ΠΎΡ€ΠΌΠ°Ρ‚ (Executable and Linkable Format). Π­Ρ‚ΠΎ спСцификация Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ, ΠΊΠ°ΠΊ инструкции записаны Π² исполняСмом ΠΊΠΎΠ΄Π΅.

Как я ΠΌΠΎΠ³Ρƒ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π°?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ file для ΠΏΠ΅Ρ€Π²ΠΎΠΉ стадии Π°Π½Π°Π»ΠΈΠ·Π°. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° способна ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ подробности, ΠΈΠ·Π²Π»Π΅Ρ‡Ρ‘Π½Π½Ρ‹Π΅ ΠΈΠ· «магичСских» чисСл ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ².

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π€Π°ΠΉΠ»Ρ‹ ELF ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для исполнСния ΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ. Π’ зависимости ΠΎΡ‚ назначСния, ΠΎΠ½ΠΈ содСрТат Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ сСгмСнты ΠΈ сСкции. Π―Π΄Ρ€ΠΎ ОБ просматриваСт сСгмСнты ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΈΡ… Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ mmap). Π‘Π΅ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π»ΠΈΠ½ΠΊΠ΅Ρ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаёт исполняСмый Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ раздСляСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π€Π°ΠΉΠ»Ρ‹ ELF ΠΎΡ‡Π΅Π½ΡŒ Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ CPU, ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΉ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» сконструирован ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ, Π² зависимости ΠΎΡ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… частСй. ΠŸΡƒΡ‚Ρ‘ΠΌ использования ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… инструмСнтов, Π²Ρ‹ смоТСтС Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„Π°ΠΉΠ»Π°, ΠΈ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ содСрТимоС Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². МоТно ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ строки, содСрТащиСся Π² Ρ„Π°ΠΉΠ»Π΅. Π₯ΠΎΡ€ΠΎΡˆΠ΅Π΅ Π½Π°Ρ‡Π°Π»ΠΎ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ исслСдуСт врСдоносныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΠ»ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ процСсс Π²Π΅Π΄Ρ‘Ρ‚ сСбя (ΠΈΠ»ΠΈ Π½Π΅ Π²Π΅Π΄Ρ‘Ρ‚) ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

РСсурсы для дальнСйшСго изучСния

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ большС Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ ELF ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ выполняСм Π² Linux Security Expert. Как Ρ‡Π°ΡΡ‚ΡŒ ΡƒΡ‡Π΅Π±Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ с практичСскими Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΠΌΠΈ.

Для Ρ‚Π΅Ρ… ΠΈΠ· вас, ΠΊΡ‚ΠΎ Π»ΡŽΠ±ΠΈΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΈ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚: ELF Format ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π·Π° авторством Π‘Ρ€Π°ΠΉΠ°Π½Π° Π Π΅ΠΉΡ‚Π΅Ρ€Π° (Brian Raiter), Ρ‚Π°ΠΊΠΆΠ΅ извСстного ΠΊΠ°ΠΊ ELFkickers. Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π»ΡŽΠ±ΠΈΡ‚ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² исходниках, посмотритС Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ELF ΠΎΡ‚ Apple.

Π‘ΠΎΠ²Π΅Ρ‚:
Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΡ‚Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ Π² Π°Π½Π°Π»ΠΈΠ·Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ², Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ популярныС инструмСнты Π°Π½Π°Π»ΠΈΠ·Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ доступны Π² настоящСС врСмя.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *