์ด์‹ ๊ฐ€๋Šฅํ•œ ์‹คํ–‰ ํŒŒ์ผ์šฉ์œผ๋กœ ๊ฐœ๋ฐœ๋œ ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Cosmopolitan 2.0 ์ถœ์‹œ

์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ ๊ฐ€์ƒ ๋จธ์‹ ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹ค์–‘ํ•œ ์šด์˜ ์ฒด์ œ์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋ฒ”์šฉ ์‹คํ–‰ ํŒŒ์ผ ํ˜•์‹์„ ๊ฐœ๋ฐœํ•˜๋Š” Cosmopolitan 2.0 ํ”„๋กœ์ ํŠธ ๋ฆด๋ฆฌ์Šค๊ฐ€ ๋ฐœํ‘œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. GCC ๋ฐ Clang์—์„œ ์ปดํŒŒ์ผํ•˜์—ฌ ์–ป์€ ๊ฒฐ๊ณผ๋Š” ๋ชจ๋“  Linux ๋ฐฐํฌํŒ, macOS, Windows, FreeBSD, OpenBSD, NetBSD์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ณ  ์‹ฌ์ง€์–ด BIOS์—์„œ๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ ์œผ๋กœ ๋งํฌ๋œ ๋ฒ”์šฉ ์‹คํ–‰ ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” ISC ๋ผ์ด์„ผ์Šค(MIT/BSD์˜ ๋‹จ์ˆœํ™”๋œ ๋ฒ„์ „)์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

๋ฒ”์šฉ ์‹คํ–‰ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ปจํ…Œ์ด๋„ˆ๋Š” Unix, Windows ๋ฐ macOS์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ˜•์‹์„ ๊ฒฐํ•ฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ๋‹ค์–‘ํ•œ ์šด์˜ ์ฒด์ œ(PE, ELF, MACHO, OPENBSD)์— ํŠน์ •ํ•œ ์„ธ๊ทธ๋จผํŠธ์™€ ํ—ค๋”๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์‹คํ–‰ ํŒŒ์ผ์ด Windows ๋ฐ Unix ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋ ค๋ฉด Thompson Shell์ด โ€‹โ€‹"#!" ์Šคํฌ๋ฆฝํŠธ ๋งˆ์ปค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์„ ํ™œ์šฉํ•˜์—ฌ Windows PE ํŒŒ์ผ์„ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ธ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด(๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ์—ฐ๊ฒฐ) ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ ZIP ์•„์นด์ด๋ธŒ ํ˜•ํƒœ์˜ ์‹คํ–‰ ํŒŒ์ผ ํ˜•์„ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ ํ˜•์‹์˜ ๊ตฌ์„ฑํ‘œ(์˜ˆ: hello.com ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜):

MZqFpD='BIOS ๋ถ€ํŠธ ์„นํ„ฐ' exec 7 $(command -v $0) printf '\177ELF...LINKER-ENCODED-FREEBSD-HEADER' >&7 exec "$0" "$@" exec qemu-x86_64 "$0" "$ @" 1๋ฒˆ ์ถœ๊ตฌ REAL ๋ชจ๋“œโ€ฆ ELF ์„ธ๊ทธ๋จผํŠธโ€ฆ OPENBSD ์ฐธ๊ณ โ€ฆ MACHO ํ—ค๋”โ€ฆ ์ฝ”๋“œ ๋ฐ ๋ฐ์ดํ„ฐโ€ฆ ZIP ๋””๋ ‰ํ† ๋ฆฌโ€ฆ

ํŒŒ์ผ ์‹œ์ž‘ ๋ถ€๋ถ„์—๋Š” Windows PE ํ˜•์‹ ํ—ค๋”๋กœ ์ธ์‹๋˜๋Š” "MZqFpD"๋ผ๋Š” ๋ ˆ์ด๋ธ”์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด ์‹œํ€€์Šค๋Š” "pop %r10;" ๋ช…๋ น์—์„œ๋„ ๋””์ฝ”๋”ฉ๋ฉ๋‹ˆ๋‹ค. jno0x4a; jo 0x4a", "jg 177x0" ๋ช…๋ น์–ด์— ๋Œ€ํ•œ "\47ELF" ๋ผ์ธ์€ ์ง„์ž…์ ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Unix ์‹œ์Šคํ…œ์€ exec ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ์‰˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ด๋ฆ„ ์—†๋Š” ํŒŒ์ดํ”„๋ฅผ ํ†ตํ•ด ์‹คํ–‰ ์ฝ”๋“œ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ ๋ฐฉ๋ฒ•์˜ ํ•œ๊ณ„๋Š” Thompson Shell ํ˜ธํ™˜ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ์‰˜๋งŒ ์‚ฌ์šฉํ•˜์—ฌ Unix ๊ณ„์—ด ์šด์˜ ์ฒด์ œ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

qemu-x86_64 ํ˜ธ์ถœ์€ ์ถ”๊ฐ€ ์ด์‹์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ x86_64 ์•„ํ‚คํ…์ฒ˜์šฉ์œผ๋กœ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๊ฐ€ ARM ํ”„๋กœ์„ธ์„œ๊ฐ€ ์žฅ์ฐฉ๋œ Raspberry Pi ๋ณด๋“œ ๋ฐ Apple ์žฅ์น˜์™€ ๊ฐ™์€ ๋น„ x86 ํ”Œ๋žซํผ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ํ”„๋กœ์ ํŠธ๋Š” ์šด์˜ ์ฒด์ œ(๋ฒ ์–ด๋ฉ”ํƒˆ) ์—†์ด ์‹คํ–‰๋˜๋Š” ๋…๋ฆฝํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋ถ€ํŠธ๋กœ๋”๊ฐ€ ์‹คํ–‰ ํŒŒ์ผ์— ์—ฐ๊ฒฐ๋˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์€ ๋ถ€ํŒ… ๊ฐ€๋Šฅํ•œ ์šด์˜ ์ฒด์ œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐœ๋ฐœ๋œ ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ libc๋Š” 2024๊ฐœ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค์—๋Š” ์•ฝ 1400๊ฐœ์˜ ๊ธฐ๋Šฅ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค). ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ Cosmopolitan์€ glibc๋งŒํผ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋ฉฐ Musl ๋ฐ Newlib๋ณด๋‹ค ๋ˆˆ์— ๋„๊ฒŒ ์•ž์„œ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Cosmopolitan์€ glibc๋ณด๋‹ค ์ฝ”๋“œ ํฌ๊ธฐ๊ฐ€ ํ›จ์”ฌ ์ž‘๊ณ  ๋Œ€๋žต Musl ๋ฐ Newlib์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. memcpy, strlen ๋“ฑ ์ž์ฃผ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋งคํฌ๋กœ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” "ํŠธ๋ฆฌํด๋‹ค์šด ์„ฑ๋Šฅ" ๊ธฐ์ˆ ์ด ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ฝ”๋“œ ์‹คํ–‰๊ณผ ๊ด€๋ จ๋œ CPU ๋ ˆ์ง€์Šคํ„ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ ˆ์ง€์Šคํ„ฐ๋งŒ ์ €์žฅํ•˜์—ฌ CPU ์ƒํƒœ๋ฅผ ์ €์žฅํ•  ๋•Œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค.

์ƒˆ ๋ฆด๋ฆฌ์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • zip ํŒŒ์ผ ๋‚ด์˜ ๋‚ด๋ถ€ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์„ฑํ‘œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(ํŒŒ์ผ์„ ์—ด ๋•Œ ์ด์ œ zip:.. ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ์ผ๋ฐ˜์ ์ธ /zip/... ๊ฒฝ๋กœ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค). ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Windows์—์„œ ๋””์Šคํฌ์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด "C:/..." ๋Œ€์‹  "/c/..."์™€ ๊ฐ™์€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฒ”์šฉ ์‹คํ–‰ ํŒŒ์ผ์˜ ํ˜•์‹์„ ์ •์˜ํ•˜๋Š” ์ƒˆ๋กœ์šด APE(Actually Portable Executable) ๋กœ๋”๊ฐ€ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋กœ๋”๋Š” mmap์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐฐ์น˜ํ•˜๊ณ  ๋” ์ด์ƒ ๋‚ด์šฉ์„ ์ฆ‰์‹œ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฒ”์šฉ ์‹คํ–‰ ํŒŒ์ผ์„ ๊ฐœ๋ณ„ ํ”Œ๋žซํผ์— ๋ฌถ์ธ ์ผ๋ฐ˜ ์‹คํ–‰ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Linux ํ”Œ๋žซํผ์—์„œ๋Š” binfmt_misc ์ปค๋„ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ APE ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. binfmt_misc๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ์ž‘ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • Linux์˜ ๊ฒฝ์šฐ OpenBSD ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐœ๋ฐœํ•œ promise() ๋ฐ unveil() ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. C, C++, Python ๋ฐ Redbean ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ด๋Ÿฌํ•œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ API์™€ ์ž„์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ promise.com ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • ๋นŒ๋“œ์—์„œ๋Š” Landlock Make ์œ ํ‹ธ๋ฆฌํ‹ฐ(๋ณด๋‹ค ์—„๊ฒฉํ•œ ์ข…์†์„ฑ ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ๊ณผ Landlock ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๋Š” GNU Make ๋ฒ„์ „)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์Šคํ…œ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„๊ณผ ๊ฒฉ๋ฆฌํ•˜๊ณ  ์บ์‹ฑ ํšจ์œจ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์˜ต์…˜์œผ๋กœ ์ผ๋ฐ˜ GNU Make๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์„ ์œ„ํ•œ ํ•จ์ˆ˜(_spawn() ๋ฐ _join())๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์–‘ํ•œ ์šด์˜ ์ฒด์ œ์— ํŠน์ •ํ•œ API๋ฅผ ํ†ตํ•œ ๋ฒ”์šฉ ๋ฐ”์ธ๋”ฉ์ž…๋‹ˆ๋‹ค. POSIX ์Šค๋ ˆ๋“œ ์ง€์›์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…๋„ ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.
  • _Thread_local ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์Šค๋ ˆ๋“œ๋ณ„๋กœ ๋ณ„๋„์˜ ์ €์žฅ์†Œ(TLS, Thread-Local Storage)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ C ๋Ÿฐํƒ€์ž„์€ ๊ธฐ๋ณธ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•ด TLS๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ฏ€๋กœ ์ตœ์†Œ ์‹คํ–‰ ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ 12KB์—์„œ 16KB๋กœ ๋Š˜์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐ stderr์— ๋Œ€ํ•œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด "--ftrace" ๋ฐ "--strace" ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ง€์›์ด ์‹คํ–‰ ํŒŒ์ผ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Linux 5.9+, FreeBSD 8+ ๋ฐ OpenBSD์—์„œ ์ง€์›๋˜๋Š” closefrom() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Linux ํ”Œ๋žซํผ์—์„œ๋Š” vDSO(๊ฐ€์ƒ ๋™์  ๊ณต์œ  ๊ฐ์ฒด) ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ clock_gettime ๋ฐ gettimeofday ํ˜ธ์ถœ์˜ ์„ฑ๋Šฅ์ด ์ตœ๋Œ€ 10๋ฐฐ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์œผ๋กœ ์ด๋™ํ•˜๊ณ  ์ปจํ…์ŠคํŠธ ์ „ํ™˜์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณต์†Œ์ˆ˜ ์ž‘์—…์„ ์œ„ํ•œ ์ˆ˜ํ•™ ํ•จ์ˆ˜๊ฐ€ Musl ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์ˆ˜ํ•™ ํ•จ์ˆ˜์˜ ์ž‘์—…์ด ๊ฐ€์†ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด nointernet() ํ•จ์ˆ˜๊ฐ€ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํšจ์œจ์ ์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜ ์ถ”๊ฐ€:append,appendf,appendr,appends,appendw,appendz,kappendf,kvappendf,vappendf.
  • ๋†’์€ ๊ถŒํ•œ์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋œ kprintf() ํ•จ์ˆ˜ ๊ณ„์—ด์˜ ๋ณดํ˜ธ ๋ฒ„์ „์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • SSL, SHA, curve25519 ๋ฐ RSA ๊ตฌํ˜„์˜ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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