ΠΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° Π½Π°Π±ΠΎΡΠ° ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ GNU Binutils 2.37, ΠΊΠΎΠΉΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΊΠ°ΡΠΎ GNU linker, GNU Π°ΡΠ΅ΠΌΠ±Π»Π΅Ρ, nm, objdump, strings, strip.
Π Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ:
- ΠΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° Π·Π° ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° Π°ΡΠ΅ΠΌΠ±Π»ΠΈΡΠ°Π½Π΅ Π±ΡΡ Π° ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈ; Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Binutils Π²Π΅ΡΠ΅ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ° C99.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π·Π° ΡΠΎΡΠΌΠ°ΡΠ° arm-symbianelf Π΅ ΠΏΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½Π°.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° RME (Realm Management Extension), ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° ARMv9-A, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ ΠΈ ΠΏΠ°ΠΌΠ΅Ρ ΠΊΡΠΌ ΠΎΡΠ΄Π΅Π»Π½ΠΎ Π·Π°ΡΠΈΡΠ΅Π½ΠΎ Π°Π΄ΡΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π΄ΠΎ ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΡΡΠΌΡΠ΅ΡΡΡ TrustZone Π½ΡΠΌΠ°Ρ Π΄ΠΎΡΡΡΠΏ. ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π΅ ΡΠ°ΡΡ ΠΎΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½ΠΈ ΡΡΠ΅Π΄ΠΈ Arm CCA (Confidential Compute Architecture). RME ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° ΠΎΠ±ΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π΄Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ ΡΠ²ΠΎΠΈΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠΈΡΠ΅Π»Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π² ΡΠ°ΠΊΠΈΠ²Π° ΡΡΠ΅Π΄ΠΈ, Π·Π° Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π΄ΠΏΠ°Π·ΡΡ ΠΎΡ Π½Π΅ΠΎΡΠΎΡΠΈΠ·ΠΈΡΠ°Π½ Π΄ΠΎΡΡΡΠΏ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΊΠΎΠΌΠΏΡΠΎΠΌΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ Ρ ΠΈΠΏΠ΅ΡΠ²Π°ΠΉΠ·ΠΎΡΠΈΡΠ΅.
- Π Π»ΠΈΠ½ΠΊΠ΅ΡΠ° ΡΠ° Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈ Π½ΠΎΠ²ΠΈ ΠΎΠΏΡΠΈΠΈ:
- '-Bno-symbolic' - ΠΎΡΠΌΠ΅Π½Ρ ΡΠ΅ΠΆΠΈΠΌΠΈΡΠ΅ '-Bsymbolic' ΠΈ '-Bsymbolic-functions';
- '-z report-relative-reloc' - ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° Π°Π΄ΡΠ΅ΡΠΈ (ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Π½Π΅);
- '-z start-stop-gc' - Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠΈ __start_*/__stop_*, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΡΠ±ΠΈΡΠ°ΡΡΡ Π½Π° ΠΎΡΠΏΠ°Π΄ΡΡΠΈ ΠΏΠΎΡΠΈΡΡΠ²Π° Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ.
- ΠΠΏΡΠΈΡΡΠ° β--sym-base=0|8|10|16β Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΊΡΠΌ ΠΏΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° readelf Π·Π° ΠΈΠ·Π±ΠΎΡ Π½Π° ΡΠΎΡΠΌΠ°ΡΠ° Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΠΈΡΡΠΎΠ²ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° ΠΎΠΏΡΠΈΠΈ ΠΊΡΠΌ ΠΏΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° nm: 'βformat=just-symbols' ('-j') Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ ΡΠ°ΠΌΠΎ Π½Π° ΠΈΠΌΠ΅Π½Π° Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ ΠΈ 'βquiet' Π·Π° Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠ½ΠΈΡΠ΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ "Π±Π΅Π· ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ".
- ΠΠΏΡΠΈΡΡΠ° ββkeep-section-symbolsβ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΊΡΠΌ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ objcopy ΠΈ strip, Π·Π° Π΄Π° Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΡΠ΅ΠΊΡΠΈΠΈ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° ΠΎΠΏΡΠΈΠΈ β--weakenβ, β--weaken-symbolβ ΠΈ β--weaken-symbolsβ ΠΊΡΠΌ objcopy Π·Π° ΠΊΠ»Π°ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° Π½Π΅Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ ΠΊΠ°ΡΠΎ ΡΠ»Π°Π±ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ.
- Readelf ΠΈ objdump Π²Π΅ΡΠ΅ ΠΈΠΌΠ°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΠ° Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅ΠΊΡΠΈΠΈΡΠ΅ β.debug_supβ ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π²ΡΡΠ·ΠΊΠΈ ΠΊΡΠΌ ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru