Google ๊ฐœ๋ฐœ์ž๋Š” LLVM์šฉ ์ž์ฒด libc ๊ฐœ๋ฐœ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.

Google์˜ ๊ฐœ๋ฐœ์ž ์ค‘ ํ•œ ๋ช… ์ œ๊ธฐ LLVM ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€๋กœ ๋‹ค์ค‘ ํ”Œ๋žซํผ ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Libc) ๊ฐœ๋ฐœ์— ๊ด€ํ•œ LLVM ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ Google์€ ํ˜„์žฌ libc(glibc, musl)์— ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉฐ LLVM์˜ ์ผ๋ถ€๋กœ ๊ฐœ๋ฐœ๋˜๋„๋ก ์ œ์•ˆ๋œ ์ƒˆ๋กœ์šด ๊ตฌํ˜„์„ ๊ฐœ๋ฐœํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

LLVM ๊ฐœ๋ฐœ์€ ์ตœ๊ทผ Google์˜ ์–ด์…ˆ๋ธ”๋ฆฌ ๋„๊ตฌ ๊ตฌ์ถ•์„ ์œ„ํ•œ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ์•„์ด๋””์–ด๋Š” Google์ด ์ด๋ฏธ libc ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ–ˆ๋‹ค๋ฉด ์ž์ฒด C++(Libc++)์šฉ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด๋ฏธ ์ œ๊ณตํ•˜์ง€๋งŒ ์œ ์‚ฌํ•œ C์šฉ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์—†๋Š” LLVM์˜ ์ผ๋ถ€๋กœ ์‹œ์Šคํ…œ์„ ์ฆ‰์‹œ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์–ด๋–ป๊ฒ ์Šต๋‹ˆ๊นŒ? (libc).

๊ฐœ๋ฐœ์€ ๋‹จ๊ณ„์ ์œผ๋กœ ์ง„ํ–‰๋˜์–ด ์ ์ฐจ์ ์œผ๋กœ ๊ธฐ๋Šฅ์ด ํ–ฅ์ƒ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์€ ์•„์ง ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ์„ ์ฐจ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์‹œ์Šคํ…œ Libc ์‚ฌ์ด์˜ ๊ณ„์ธต์œผ๋กœ ์„ค๊ณ„๋˜๋„๋ก ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ์ˆ˜์ค€์˜ ๊ธฐ๋Šฅ์— ๋„๋‹ฌํ•œ ํ›„์—๋Š” ์ƒˆ๋กœ์šด Libc๋ฅผ ์‹œ์Šคํ…œ Libc์˜ ์™„์ „ํ•œ ๋Œ€์ฒดํ’ˆ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. x86-64 ์•„ํ‚คํ…์ฒ˜, Linux, ์ •์  ๋งํฌ ์ง€์›๋ถ€ํ„ฐ ์‹œ์ž‘ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค(๋™์  ๋กœ๋”ฉ, ๋งํฌ ๋ฐ ์ถ”๊ฐ€ ์•„ํ‚คํ…์ฒ˜๋Š” ๋ถ€์ฐจ์ ์œผ๋กœ ๊ตฌํ˜„๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค).

์ด ํ”„๋กœ์ ํŠธ๋Š” ์•„์ง ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ๋‹จ๊ณ„์— ์žˆ์ง€๋งŒ ๊ธฐ๋ณธ ๋ชฉํ‘œ๋Š” ์ด๋ฏธ ์ •์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋†€๋ฆฌ์‹ ์„ธํŠธ๊ฐ€ ์•„๋‹Œ ์„ธ๋ถ„ํ™”๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ฒ ํ•™์— ๋”ฐ๋ฅธ ๋ชจ๋“ˆํ™” ๋ฐ ๊ฐœ๋ฐœ
  • ๋ชจ๋“œ์˜ ์ •์  ๋งํฌ ์ง€์› PIE (์œ„์น˜ ๋…๋ฆฝ์  ์‹คํ–‰ ํŒŒ์ผ) ๋ฐ PIE๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ •์ ์œผ๋กœ ๋งํฌ๋œ ์‹คํ–‰ ํŒŒ์ผ์„ ์œ„ํ•œ CRT(C ๋Ÿฐํƒ€์ž„) ๋ฐ PIE ๋กœ๋” ์ œ๊ณต
  • POSIX ์ถ”๊ฐ€ ๋ฐ ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ์ผ๋ถ€ ์‹œ์Šคํ…œ๋ณ„ ํ™•์žฅ์„ ํ†ตํ•ด ๋Œ€๋ถ€๋ถ„์˜ ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณต๊ธ‰์—…์ฒด๋ณ„ ํ™•์žฅ์— ์ฃผ์˜ํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ํƒ€์‚ฌ ํ™•์žฅ ์ง€์›๊ณผ ๊ด€๋ จํ•˜์—ฌ Clang ๋ฐ libc++ ํ”„๋กœ์ ํŠธ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ œ์•ˆ๋ฉ๋‹ˆ๋‹ค.
  • ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒˆ๋‹ˆํƒ€์ด์ € ๋ฐ ํผ์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ LLVM ํˆดํ‚ท์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ์‹œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ™œ๋™์ ์ธ LLVM ๊ฐœ๋ฐœ์ž ์ค‘ ํ•œ ๋ช… ์ง€์‹œ ๋œlibc๋ฅผ LLVM ํˆดํ‚ท์˜ ์ผ๋ถ€๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๋Š” ๊ฒƒ์€ ๋ถ„๋ช…ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ๋Ÿฌํ•œ ํ•„์š”๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์ž˜ ์ž‘์„ฑ๋˜๊ณ  ๋‹ค์–‘ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ง€์›ํ•˜๋ฉฐ ๋™์  ์ง€์›์„ ํฌํ•จํ•˜์—ฌ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” musl ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ. musl์„ LLVM์— ๋‚ด์žฅํ•˜๊ณ  ์ด๋ฅผ ๋ฉ”์ธ ํ”„๋กœ์ ํŠธ์™€ ๋™๊ธฐํ™”๋œ ํฌํฌ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ํƒ€๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ์˜๊ฒฌ๋„ ํ‘œํ˜„ ๋œ Google์˜ ์ œ์•ˆ๊ณผ LLVM ๋ฐฐํฌํŒ์— Libc๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์™œ ๋งค์šฐ ๋‚˜์œ ์ƒ๊ฐ์ธ์ง€ ์ฃผ์žฅํ•˜๋ ค๋Š” Musl ํ”„๋กœ์ ํŠธ์˜ ์ €์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ •ํ™•ํ•˜๊ณ  ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๊ณ ํ’ˆ์งˆ์˜ Libc๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์–ด๋ ค์šด ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ฝ”๋“œ์˜ ์–‘์— ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ C/C++๋กœ ์ž‘์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฑฐ๋Œ€ํ•œ ๊ณ„์ธต๊ณผ ๋Ÿฐํƒ€์ž„์ด ์‚ฌ์šฉ๋˜๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ณ ๋ คํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ๋™์ž‘์„ ๋ณด์žฅํ•˜๊ณ  ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์˜ ์–ด๋ ค์›€์„ ๋ณด์žฅํ•˜๋Š” ๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค. Libc์— ์˜ํ•ด. ๋‰˜์•™์Šค๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ์ •๋ฉด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๊ธฐ์กด์˜ ๋งŽ์€ ํ”„๋กœ๊ทธ๋žจ์ด Libc์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ์ด์–ด์งˆ ๋ฟ์ด์ง€๋งŒ ๊ทธ๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ๋Š” ์†Œ๋น„์ž์—๊ฒŒ ๊ด€์‹ฌ์ด ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๊ธฐ์—… ๊ฐœ๋ฐœ์€ Libc๋ฅผ ๋ง์น  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋ฅผ ๋„๋ฆฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ•ดํ‚น์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์—… ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์˜ ํ›„์›์— ๋”ฐ๋ฅธ ๊ฐœ๋ฐœ์€ ํšŒ์‚ฌ์˜ ์š”๊ตฌ์™€ ์†”๋ฃจ์…˜ ์ชฝ์œผ๋กœ ๋‹ด์š”๋ฅผ ๋Œ์–ด๋‹น๊ฒจ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ด์ต์„ ์†์ƒ์‹œํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฒ„๊ทธ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋ฅผ ์‹๋ณ„ํ•œ ๊ฒฝ์šฐ ์ œ์–ด ๊ฐœ๋ฐœ์—์„œ๋Š” ๋ฒ„๊ทธ ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค Libc๊ฐ€ ์ด ๋ฒ„๊ทธ์™€ ํ˜ธํ™˜๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. Apple์€ ์ด๋Ÿฌํ•œ ๋ชฉ์ ์œผ๋กœ BSD libc ํฌํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  Google์€ Fuchsia์—์„œ musl ํฌํฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. musl ๊ฐœ๋ฐœ์ž์˜ ๊ฒฝํ—˜์— ๋”ฐ๋ฅด๋ฉด ๋ผ์ด์„ผ์‹ฑ ๋ฌธ์ œ๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๋กœ ๋ณ€ํ˜ธ์‚ฌ๋กœ๋ถ€ํ„ฐ ์—ฐ๋ฝ์„ ๋ฐ›์•˜์ง€๋งŒ ์ง€์ ์— ์“ธ๋ชจ์—†๊ณ  ํŒŒ๊ดด์ ์ธ ๋ณ€๊ฒฝ์„ ํ•˜๊ธฐ ์ „์— ๊ธฐ์ˆ ์ ์ธ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด ์—ฐ๋ฝ์„ ๋ฐ›์€ ์ ์€ ํ•œ ๋ฒˆ๋„ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
  • libc ๊ฐœ๋ฐœ์—์„œ ๋‹จ์ผ ๋ฌธํ™”๊ฐ€ ์—†๊ณ  ๊ฐœ๋ณ„ ์ œ์–ด๋ณด๋‹ค๋Š” ํ•ฉ์˜ ๊ธฐ๋ฐ˜ ํ‘œ์ค€์— ์ค‘์ ์„ ๋‘์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ํŠน์ • ๊ตฌํ˜„์— ์–ฝ๋งค์ด๊ธฐ๋ณด๋‹ค๋Š” ํ‘œ์ค€์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ musl์˜ ์ž‘์„ฑ์ž๊ฐ€ LLVM์— ์ž์‹ ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ๊ณผ LLVM ๋‚ด์—์„œ libc๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์— ๋ฐ˜๋Œ€ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ libc์˜ ๋…๋ฆฝ์ ์ธ ํŠน์„ฑ์ด ์†์‹ค๋˜๊ณ  ํŠน์ • ๊ตฌํ˜„์ด LLVM์— ๋Œ€ํ•œ ์ผ๋ฅ˜ ์†”๋ฃจ์…˜์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. LLVM ๋ฐ ๊ธฐํƒ€ ๋ชจ๋“  ์†”๋ฃจ์…˜์€ 2๊ธ‰ ์†”๋ฃจ์…˜์ด ๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€