ΠŸΡƒΡΠΊΠ°Π½Π΅ Π½Π° компилаторния ΠΏΠ°ΠΊΠ΅Ρ‚ LLVM 15.0

Π‘Π»Π΅Π΄ ΡˆΠ΅ΡΡ‚ мСсСца Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° бСшС прСдставСно ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° LLVM 15.0 - GCC-ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌ инструмСнтариум (ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° ΠΊΠΎΠ΄), ΠΊΠΎΠΉΡ‚ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π² ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ Π±ΠΈΡ‚ΠΊΠΎΠ΄ Π½Π° RISC-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ инструкции (Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина ΠΎΡ‚ ниско Π½ΠΈΠ²ΠΎ с систСма Π·Π° многостСпСнна оптимизация). ГСнСрираният псСвдокод ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ Π² машинни инструкции Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°.

Основни подобрСния Π² Clang 15.0:

  • Π—Π° систСми, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° x86, Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ Ρ„Π»Π°Π³ΡŠΡ‚ β€ž-fzero-call-used-regsβ€œ, ΠΊΠΎΠΉΡ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ всички CPU рСгистри, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ във функцията, сС Π½ΡƒΠ»ΠΈΡ€Π°Ρ‚, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π²ΡŠΡ€Π½Π°Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° ΠΎΡ‚ функцията. Π’Π°Π·ΠΈ опция Π²ΠΈ позволява Π΄Π° Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚Π΅ срСщу ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π½Π° информация ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΡ‚Π΅ броя Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅, подходящи Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ROP (Return-Oriented Programming) Π΄ΠΆΠ°Π΄ΠΆΠΈ Π² Сксплойти с ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ 20%.
  • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ Π΅ Ρ€Π°Π½Π΄ΠΎΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° структури Π·Π° C ΠΊΠΎΠ΄, ΠΊΠΎΠ΅Ρ‚ΠΎ услоТнява ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ структуритС Π² случай Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° уязвимости. Π Π°Π½Π΄ΠΎΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ сС Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈΡ‚Π΅ randomize_layout ΠΈ no_randomize_layout ΠΈ изисква Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° сСмС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ„Π»Π°Π³Π° "-frandomize-layout-seed" ΠΈΠ»ΠΈ "-frandomize-layout-seed-file".
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Ρ„Π»Π°Π³ΡŠΡ‚ "-fstrict-flex-arrays=", с ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚Π΅ Π³Ρ€Π°Π½ΠΈΡ†ΠΈΡ‚Π΅ Π·Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° Π½Π° гъвкавия масив Π² структуритС (Flexible Array Members, масив с Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² края Π½Π° структурата). ΠšΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ΠΎ Π½Π° 0 (ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅), послСдният Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΎΡ‚ структурата с масив Π²ΠΈΠ½Π°Π³ΠΈ сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΊΠ°Ρ‚ΠΎ гъвкав масив, 1 - само Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ [], [0] ΠΈ [1] сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ гъвкав масив, 2 - само Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ [] ΠΈ [0] сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ гъвкав масив.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ СкспСримСнтална ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° C-подобния Π΅Π·ΠΈΠΊ HLSL (High-Level Shader Language), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² DirectX Π·Π° писанС Π½Π° ΡˆΠ΅ΠΉΠ΄ΡŠΡ€ΠΈ.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ β€ž-Warray-parameterβ€œ, Π·Π° Π΄Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π²Π° Π·Π° замСнящи Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π½Π΅ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с масиви с фиксирана ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° дълТина.
  • ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с MSVC. Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° "#pragma функция" (инструктира ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° функция вмСсто Π²Π³Ρ€Π°Π΄Π΅Π½ΠΎ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅) ΠΈ "#pragma alloc_text" (Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π° с функционалния ΠΊΠΎΠ΄), прСдоставСни Π² MSVC. Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° MSVC-ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ /JMC ΠΈ /JMC Ρ„Π»Π°Π³ΠΎΠ²Π΅.
  • ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΏΠΎ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° Π±ΡŠΠ΄Π΅Ρ‰ΠΈΡ‚Π΅ стандарти C2X ΠΈ C++23. Π—Π° Π΅Π·ΠΈΠΊΠ° C са Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ: Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΡŠΡ‚ noreturn, ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈΡ‚Π΅ Π΄ΡƒΠΌΠΈ false ΠΈ true, Ρ‚ΠΈΠΏΡŠΡ‚ _BitInt(N) Π·Π° Ρ†Π΅Π»ΠΈ числа с Π΄Π°Π΄Π΅Π½Π° Π±ΠΈΡ‚ΠΎΠ²Π° Π΄ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½Π°, макроси *_WIDTH, ΠΏΡ€Π΅Ρ„ΠΈΠΊΡΡŠΡ‚ u8 Π·Π° UTF-8 ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ΠΈ Π·Π½Π°Ρ†ΠΈ.

    Π—Π° C++ са Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ слСднитС: сливанС Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ABI ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ Ρ‡Π»Π΅Π½ΠΎΠ²Π΅, ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Π° инициализация Π½Π° Π½Π΅Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΈ индСксни ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ, auto(x), Π½Π΅Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, goto ΠΈ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ във Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ constexpr , ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈ Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π°Ρ‰ΠΈ послСдоватСлности, ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈ Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π°Ρ‰ΠΈ символи.

  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° OpenCL ΠΈ OpenMP, са Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ. Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° OpenCL Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ cl_khr_subgroup_rotate.
  • Π—Π° x86 Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π° срСщу уязвимости Π² процСсоритС, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½ΠΈ ΠΎΡ‚ спСкулативно изпълнСниС Π½Π° инструкции слСд бСзусловни ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° прСскачанС Π½Π°ΠΏΡ€Π΅Π΄. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ възниква ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΏΡ€Π΅Π²Π°Π½Ρ‚ΠΈΠ²Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° инструкции, нСпосрСдствСно слСдващи инструкцията Π·Π° разклоняванС Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° (SLS, Straight Line Speculation). Π—Π° Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ Π·Π°Ρ‰ΠΈΡ‚Π°Ρ‚Π°, сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° опцията β€ž-mharden-sls=[none|all|return|indirect-jmp]”.
  • Π—Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ SSE2, Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ Ρ‚ΠΈΠΏ _Float16, ΠΊΠΎΠΉΡ‚ΠΎ сС Π΅ΠΌΡƒΠ»ΠΈΡ€Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ‚ΠΈΠΏΠ° float Π² случай Π½Π° липса Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° инструкции AVX512-FP16.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Ρ„Π»Π°Π³ "-m[no-]rdpru" Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° инструкцията RDPRU, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π°, Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΉΠΊΠΈ с процСсори AMD Zen2.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Ρ„Π»Π°Π³ΡŠΡ‚ β€ž-mfunction-return=thunk-externβ€œ Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π° срСщу уязвимостта RETBLEED, която Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‡Ρ€Π΅Π· добавянС Π½Π° послСдоватСлност ΠΎΡ‚ инструкции, която ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π° участиСто Π½Π° спСкулативния ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° изпълнСниС Π·Π° ΠΈΠ½Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΈ разклонСния.

ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈ ΠΈΠ½ΠΎΠ²Π°Ρ†ΠΈΠΈ Π² LLVM 15.0:

  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Cortex-M85 CPU, Armv9-A, Armv9.1-A ΠΈ Armv9.2-A Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ, Armv8.1-M PACBTI-M Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ СкспСримСнталСн Π±Π΅ΠΊΠ΅Π½Π΄ Π·Π° DirectX, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° DXIL (DirectX Intermediate Language), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π·Π° DirectX ΡˆΠ΅ΠΉΠ΄ΡŠΡ€ΠΈ. Π‘Π΅ΠΊΠ΅Π½Π΄ΡŠΡ‚ сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° Ρ‡Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° β€ž-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectXβ€œ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° асСмблиранСто.
  • Libc++ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° Π΄Π° внСдрява Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° стандартитС C++20 ΠΈ C++2b, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° внСдряванСто Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° β€žformatβ€œ ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π°Ρ‚Π° СкспСримСнтална вСрсия Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° β€žrangesβ€œ.
  • ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈ Π±Π΅ΠΊΠ΅Π½Π΄ΠΎΠ²Π΅ Π·Π° x86, PowerPC ΠΈ RISC-V Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° LLD Π»ΠΈΠ½ΠΊΠ΅Ρ€Π° ΠΈ LLDB Π΄Π΅Π±ΡŠΠ³Π΅Ρ€Π° са ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€