ืžืคืชื—ื™ื ืžื’ื•ื’ืœ ื”ืฆื™ืขื• ืœืคืชื— libc ืžืฉืœื”ื ืขื‘ื•ืจ LLVM

ืื—ื“ ื”ืžืคืชื—ื™ื ืžื’ื•ื’ืœ ืžื•ึผืจึธื ื‘ืจืฉื™ืžืช ื”ืชืคื•ืฆื” ืฉืœ LLVM ืื•ื“ื•ืช ืคื™ืชื•ื— ืกืคืจื™ื™ืช C ืกื˜ื ื“ืจื˜ื™ืช ืžืจื•ื‘ืช ืคืœื˜ืคื•ืจืžื•ืช (Libc) ื‘ืžืกื’ืจืช ืคืจื•ื™ืงื˜ LLVM. ืžื›ืžื” ืกื™ื‘ื•ืช, ื’ื•ื’ืœ ืœื ืžืกืชืคืงืช ื‘-libc ื”ื ื•ื›ื—ื™ (glibc, musl) ื•ื”ื—ื‘ืจื” ื‘ื“ืจืš ืœืคื™ืชื•ื— ืžื™ืžื•ืฉ ื—ื“ืฉ, ืฉืžื•ืฆืข ืœืคื™ืชื•ื— ื‘ืžืกื’ืจืช LLVM.

ืคื™ืชื•ื—ื™ LLVM ืฉื™ืžืฉื• ืœืื—ืจื•ื ื” ื›ื‘ืกื™ืก ืœื‘ื ื™ื™ืช ื›ืœื™ ื”ื”ืจื›ื‘ื” ืฉืœ ื’ื•ื’ืœ. ื”ืจืขื™ื•ืŸ ื”ืžืจื›ื–ื™ ื”ื•ื ืฉืื ื’ื•ื’ืœ ื›ื‘ืจ ื”ืชื—ื™ืœื” ืœืคืชื— ืืช ื”-libc ืฉืœื”, ืื– ืœืžื” ืœื ืœืคืชื— ืžื™ื“ ืืช ื”ืžืขืจื›ืช ืฉืœื” ื‘ืžืกื’ืจืช LLVM, ืฉื›ื‘ืจ ืžืฆื™ืขื” ืกืคืจื™ื™ื” ืกื˜ื ื“ืจื˜ื™ืช ืžืฉืœื” ืขื‘ื•ืจ C++ (Libc++), ืื‘ืœ ืื™ืŸ ืœื” ืกืคืจื™ื™ื” ืกื˜ื ื“ืจื˜ื™ืช ื“ื•ืžื” ืขื‘ื•ืจ C (libc).

ื”ืคื™ืชื•ื— ืžืชื•ื›ื ืŸ ืœื”ืชื‘ืฆืข ื‘ืฉืœื‘ื™ื, ืœื”ื’ื“ื™ืœ ื‘ื”ื“ืจื’ื” ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช. ื”ืืคืฉืจื•ื™ื•ืช ื”ืจืืฉื•ื ื•ืช ืžื•ืฆืขื•ืช ืœืขืฆื‘ ื›ืฉื›ื‘ื” ื‘ื™ืŸ ื”ืืคืœื™ืงืฆื™ื” ืœืžืขืจื›ืช Libc, ืžืžื ื” ื™ื•ืฉืืœื• ืชื›ื•ื ื•ืช ืฉื˜ืจื ื™ื•ืฉืžื•. ืœืื—ืจ ื”ื’ืขื” ืœืจืžื” ืžืกื•ื™ืžืช ืฉืœ ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช, ื”-Libc ื”ื—ื“ืฉ ื™ื›ื•ืœ ืœืฉืžืฉ ื›ืชื—ืœื™ืฃ ืžืœื ืœืžืขืจื›ืช Libc. ืื ื• ืžืชื›ื ื ื™ื ืœื”ืชื—ื™ืœ ืขื ืชืžื™ื›ื” ื‘ืืจื›ื™ื˜ืงื˜ื•ืจืช x86-64, ืœื™ื ื•ืงืก ื•ืงื™ืฉื•ืจ ืกื˜ื˜ื™ (ื˜ืขื™ื ื” ื“ื™ื ืžื™ืช, ืงื™ืฉื•ืจ ื•ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช ื ื•ืกืคื•ืช ื™ื•ื˜ืžืขื• ื‘ืื•ืคืŸ ืžืฉื ื™).

ื”ืคืจื•ื™ืงื˜ ืขื“ื™ื™ืŸ ื‘ืฉืœื‘ ื”ืคื™ืชื•ื— ื”ืจืืฉื•ื ื™, ืืš ื›ื‘ืจ ื”ื•ื’ื“ืจื• ืžื˜ืจื•ืช ื‘ืกื™ืกื™ื•ืช:

  • ืžื•ื“ื•ืœืจื™ื•ืช ื•ืคื™ืชื•ื— ื‘ื”ืชืื ืœืคื™ืœื•ืกื•ืคื™ื” ืฉืœ ืืกืคืงืช ืกืคืจื™ื™ื” ื’ืจืขื™ื ื™ืช ื•ืœื ืกื˜ ืžื•ื ื•ืœื™ื˜ื™;
  • ืชืžื™ื›ื” ื‘ืงื™ืฉื•ืจ ืกื˜ื˜ื™ ื‘ืžืฆื‘ื™ื PIE (ืงื•ื‘ืฆื™ ื”ืคืขืœื” ื‘ืœืชื™ ืชืœื•ื™ื™ื ื‘ืžื™ืงื•ื) ื•ืœืœื PIE. ืžืชืŸ CRT (ื–ืžืŸ ืจื™ืฆื” C) ื•ืžื˜ืขืŸ PIE ืขื‘ื•ืจ ืงื•ื‘ืฆื™ ื”ืคืขืœื” ืžืงื•ืฉืจื™ื ืกื˜ื˜ื™ืช;
  • ืชืžื™ื›ื” ื‘ืจื•ื‘ ื”ืคื•ื ืงืฆื™ื•ืช ื”ืกื˜ื ื“ืจื˜ื™ื•ืช ืฉืœ ืกืคืจื™ื™ืช C, ืขื ืชื•ืกืคื•ืช POSIX ื•ื›ืžื” ื”ืจื—ื‘ื•ืช ืกืคืฆื™ืคื™ื•ืช ืœืžืขืจื›ืช ื”ื ื“ืจืฉื•ืช ืขืœ ื™ื“ื™ ื™ื™ืฉื•ืžื™ื ืงื™ื™ืžื™ื;
  • ื”ื™ื–ื”ืจ ืขื ื”ืจื—ื‘ื•ืช ืกืคืฆื™ืคื™ื•ืช ืœืกืคืง ื•ื”ื•ืกืฃ ืื•ืชืŸ ืจืง ื›ืืฉืจ ื™ืฉ ืฆื•ืจืš. ืœื’ื‘ื™ ืชืžื™ื›ื” ื‘ื”ืจื—ื‘ื•ืช ืฉืœ ืฆื“ ืฉืœื™ืฉื™, ืžื•ืฆืข ืœื”ืฉืชืžืฉ ื‘ื’ื™ืฉื” ืฉืœ ื”ืคืจื•ื™ืงื˜ื™ื Clang ื•-libc++;
  • ืฉื™ืžื•ืฉ ื‘ืฉื™ื˜ื•ืช ืขื‘ื•ื“ื” ืžื•ืžืœืฆื•ืช ื‘ืคื™ืชื•ื— ื‘ืืžืฆืขื•ืช ืขืจื›ืช ื”ื›ืœื™ื ืฉืœ LLVM, ื›ื’ื•ืŸ ืฉื™ืžื•ืฉ ื‘ื—ื•ืžืจ ื—ื™ื˜ื•ื™ ื•ื‘ื“ื™ืงื•ืช ืžื˜ื•ืฉื˜ืฉ ื›ื‘ืจ ืžื”ื”ืชื—ืœื”.

ืื—ื“ ืžืžืคืชื—ื™ LLVM ื”ืคืขื™ืœื™ื ื”ืฆื‘ื™ืขื‘ืจื•ืจ ืฉื–ื” ื”ื’ื™ื•ื ื™ ืœืฉืœื•ื— ืืช libc ื›ื—ืœืง ืžืขืจืš ื”ื›ืœื™ื ืฉืœ LLVM, ืื‘ืœ ื‘ื“ืจืš ื›ืœืœ, ื›ืฉืžืชืขื•ืจืจ ืฆื•ืจืš ื›ื–ื”, ื”ื ืžืฉืชืžืฉื™ื ื‘ืกืคืจื™ื™ืช musl, ืฉื›ืชื•ื‘ื” ื”ื™ื˜ื‘, ืชื•ืžื›ืช ื‘ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช ืฉื•ื ื•ืช ื•ืžืกืคืงืช ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ื“ืจื•ืฉื”, ื›ื•ืœืœ ืชืžื™ื›ื” ื‘ื“ื™ื ืžื™ื•ืช ืžึฐืงึทืฉืึตืจ. ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื–ื” ืžื•ืฆื“ืง ืœื”ื˜ืžื™ืข ืืช musl ืœืชื•ืš LLVM ื•ืœืคืชื— ืื•ืชื• ื›ืžื–ืœื’ ื”ืžืกื•ื ื›ืจืŸ ืขื ื”ืคืจื•ื™ืงื˜ ื”ืจืืฉื™.

ื’ื ื“ืขืชืš ืœื™ื“ื™ ื‘ื™ื˜ื•ื™ ืžื—ื‘ืจ ืคืจื•ื™ืงื˜ Musl, ืฉื ื™ืกื” ืœื˜ืขื•ืŸ ืžื“ื•ืข ื”ื”ืฆืขื” ืฉืœ ื’ื•ื’ืœ ื•ื”ื›ืœืœืช Libc ื‘ื”ืคืฆืช LLVM ื”ื ืจืขื™ื•ื ื•ืช ื’ืจื•ืขื™ื ืžืื•ื“:

  • ืคื™ืชื•ื— ื•ืชื—ื–ื•ืงื” ืฉืœ Libc ื ื›ื•ืŸ, ืชื•ืื ื•ืื™ื›ื•ืชื™ ื”ื™ื ืžืฉื™ืžื” ืงืฉื” ืžืื•ื“. ื”ื‘ืขื™ื” ื”ื™ื ืœื ื‘ื›ืžื•ืช ื”ืงื•ื“, ืืœื ื‘ื”ืงืคื“ื” ืขืœ ื”ืชื ื”ื’ื•ืช ื ื›ื•ื ื” ื•ืงืฉื™ื™ื ื‘ื™ื™ืฉื•ื ืžืžืฉืงื™ื, ืชื•ืš ื”ืชื—ืฉื‘ื•ืช ื‘ืฉื›ื‘ืช ื”ืืคืœื™ืงืฆื™ื•ืช ื”ืขืฆื•ืžื” ืฉื ื›ืชื‘ื• ืื™ ืคืขื ื‘-C/C++, ื•ื›ืŸ ื‘ืืคืœื™ืงืฆื™ื•ืช ื‘ืฉืคื•ืช ืื—ืจื•ืช, ืฉื–ืžืŸ ื”ืจื™ืฆื” ืฉืœื”ืŸ ื ืžืฆื ื‘ืฉื™ืžื•ืฉ ืžืืช Libc. ื’ื™ืฉื” ื—ื–ื™ืชื™ืช ืžื‘ืœื™ ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ืืช ื”ื ื™ื•ืื ืกื™ื ืจืง ืชื•ื‘ื™ืœ ืœื›ืš ืฉื”ืจื‘ื” ืชื•ื›ื ื™ื•ืช ืงื™ื™ืžื•ืช ืœื ื™ื•ื›ืœื• ืœืขื‘ื•ื“ ืขื Libc, ืื‘ืœ ืื– ืคืจื•ื™ืงื˜ ื›ื–ื” ืœื ื™ืขื ื™ื™ืŸ ืืช ื”ืฆืจื›ื ื™ื.
  • ืคื™ืชื•ื— ืชืื’ื™ื“ื™ ื™ื›ื•ืœ ืœื”ืจื•ืก ืืช Libc, ืื‘ืœ ืœื“ื—ื•ืฃ ืื•ืชื• ืœืฉื™ืžื•ืฉ ื ืจื—ื‘, ื•ื›ืชื•ืฆืื” ืžื›ืš ื”ืฆื•ืจืš ืœื”ื•ืกื™ืฃ ืคืจื™ืฆื•ืช ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืชืื™ืžื•ืช ื‘ืืคืœื™ืงืฆื™ื•ืช. ืคื™ืชื•ื— ื‘ื—ืกื•ืช ืคืจื•ื™ืงื˜ ืงื•ื“ ืคืชื•ื— ืชืื’ื™ื“ื™ ื™ืžืฉื•ืš ืืช ื”ืฉืžื™ื›ื” ืœื›ื™ื•ื•ืŸ ื”ืฆืจื›ื™ื ื•ื”ืคืชืจื•ื ื•ืช ืฉืœ ื”ื—ื‘ืจื”, ืชื•ืš ืคื’ื™ืขื” ื‘ืื™ื ื˜ืจืกื™ื ืฉืœ ื”ืงื”ื™ืœื”. ืœื“ื•ื’ืžื”, ืื ืืชื” ืžื–ื”ื” ื‘ืขื™ื” ืฉื ื’ืจืžืช ืขืœ ื™ื“ื™ ื‘ืื’ ื‘ืชื•ื›ื ื” ืื—ืจืช, ื‘ืคื™ืชื•ื— ืžื‘ื•ืงืจ ืงืœ ื™ื•ืชืจ ืœื”ื‘ื˜ื™ื— ืฉ-Libc ืชื•ืื ืœื‘ืื’ ื–ื” ืžืืฉืจ ืœืชืงืŸ ืืช ื”ื‘ืื’ ืขืฆืžื•. ืืคืœ ืžืฉืชืžืฉืช ื‘ืžื–ืœื’ BSD libc ืœืžื˜ืจื•ืช ืืœื•, ื•ื’ื•ื’ืœ ืžืฉืชืžืฉืช ื‘ืžื–ืœื’ ื”ืžื•ืกืœ ื‘ืคื•ืงืกื™ื”. ื”ื ื™ืกื™ื•ืŸ ืฉืœ ืžืคืชื— musl ื”ื•ื ืฉืคื ื• ืืœื™ื• ื‘ืขื™ืงืจ ืขืœ ื™ื“ื™ ืขื•ืจื›ื™ ื“ื™ืŸ ืœื‘ื™ืจื•ืจ ื ื•ืฉืื™ ืจื™ืฉื•ื™, ืืš ืžืขื•ืœื ืœื ืคื ื• ืืœื™ื• ืœื‘ื™ืจื•ืจ ืคืจื˜ื™ื ื˜ื›ื ื™ื™ื ืœืคื ื™ ื‘ื™ืฆื•ืข ืฉื™ื ื•ื™ื™ื ื—ืกืจื™ ืชื•ืขืœืช ื•ืžืคืจื™ืขื™ื ื‘ืกื ื™ืคื™ื•.
  • ื”ื™ืขื“ืจ ืžื•ื ื•-ืชืจื‘ื•ืช ื‘ืคื™ืชื•ื— libc ื•ื”ืชืžืงื“ื•ืช ื‘ืกื˜ื ื“ืจื˜ื™ื ืžื•ื ืขื™ ื”ืกื›ืžื” ื•ืœื ื‘ืฉืœื™ื˜ื” ืื™ื ื“ื™ื‘ื™ื“ื•ืืœื™ืช, ืžื” ืฉืžื ื™ืข ืžืคืชื—ื™ ื™ื™ืฉื•ืžื™ื ืœื”ืฉืชืžืฉ ื‘ืชืงื ื™ื ื‘ืžืงื•ื ืœื”ื™ื•ืช ืงืฉื•ืจื™ื ืœื™ื™ืฉื•ืžื™ื ืกืคืฆื™ืคื™ื™ื. ืœื›ืŸ ืžื—ื‘ืจ ื”-musl ืžืชื ื’ื“ ืœื”ื›ืœืœืช ืกืคืจื™ื™ืชื• ื‘-LLVM, ื•ื›ืŸ ื ื’ื“ ืคื™ืชื•ื— libc ื‘ืชื•ืš LLVM, ืฉื›ืŸ ื‘ืžืงืจื” ื–ื” ื”ืื•ืคื™ ื”ืขืฆืžืื™ ืฉืœ libc ืื•ื‘ื“ ื•ื™ื™ืฉื•ื ืžืกื•ื™ื ื”ื•ืคืš ืœืคืชืจื•ืŸ ืžืžื“ืจื’ื” ืจืืฉื•ื ื” ืขื‘ื•ืจ LLVM, ื•ื›ืœ ื”ืฉืืจ ื”ื•ืคื›ื™ื ืœืคืชืจื•ืŸ ืกื•ื’ ื‘'.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”