๊ณ ์„ฑ๋Šฅ x86-64 ์—๋ฎฌ๋ ˆ์ดํ„ฐ์ธ Blink์˜ ์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค

์—๋ฎฌ๋ ˆ์ด์…˜ ํ”„๋กœ์„ธ์„œ๊ฐ€ ์žˆ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ์ •์  ๋ฐ ๋™์ ์œผ๋กœ ๋นŒ๋“œ๋œ Linux ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” x86-64 ํ”„๋กœ์„ธ์„œ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” Blink ํ”„๋กœ์ ํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ์ค‘์š”ํ•œ ๋ฆด๋ฆฌ์Šค๊ฐ€ ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Blink๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด x86-64 ์•„ํ‚คํ…์ฒ˜์šฉ์œผ๋กœ ์ปดํŒŒ์ผ๋œ Linux ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค๋ฅธ POSIX ํ˜ธํ™˜ ์šด์˜ ์ฒด์ œ(macOS, FreeBSD, NetBSD, OpenBSD, Cygwin) ๋ฐ ๋‹ค๋ฅธ ํ•˜๋“œ์›จ์–ด ์•„ํ‚คํ…์ฒ˜(x86, ARM, RISC-V, MIPS)๊ฐ€ ์žˆ๋Š” ํ•˜๋“œ์›จ์–ด์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. , PowerPC, s390x). ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” C(ANSI C11)๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ISC ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ข…์†์„ฑ ์ค‘ libc(POSIX.1-2017)๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ๋ฉด์—์„œ Blink๋Š” qemu-x86_64 ๋ช…๋ น๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋” ์ž‘์€ ๋””์ž์ธ๊ณผ ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด๋ผ๋Š” ์ ์—์„œ QEMU์™€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Blink ์‹คํ–‰ ํŒŒ์ผ์€ qemu-x221_115์˜ ๊ฒฝ์šฐ 4MB ๋Œ€์‹  86KB(์ž˜๋ฆฐ ๋นŒ๋“œ ํฌํ•จ - 64KB)๋งŒ ์‚ฌ์šฉํ•˜๋ฉฐ GCC ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์‹คํ–‰ํ•˜๊ณ  ์ˆ˜ํ•™ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ผ๋ถ€ ํ…Œ์ŠคํŠธ์˜ ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ๋ณผ ๋•Œ, QEMU๋ฅผ ์•ฝ XNUMX๋ฐฐ ์ถ”์›”ํ•ฉ๋‹ˆ๋‹ค.

๊ณ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์‚ฌ์šฉ๋˜์–ด ์†Œ์Šค ๋ช…๋ น์„ ๋Œ€์ƒ ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ๊ธฐ๊ณ„ ์ฝ”๋“œ๋กœ ์ฆ‰์„์—์„œ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Cosmopolitan, Glibc ๋ฐ Musl๋กœ ์ปดํŒŒ์ผ๋œ ELF, PE(Portable Executables) ๋ฐ bin(Flat ์‹คํ–‰ ํŒŒ์ผ) ํ˜•์‹์˜ ์‹คํ–‰ ํŒŒ์ผ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์ง์ ‘ ์‹คํ–‰์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค. i180, i600, SSE86, x8086_386, SSE2, SSSE86, CLMUL, POPCNT, ADX, BMI64(MULX, PDEP, PEXT), X3, RDRND, RDSEED๋ฅผ ํฌ๊ด„ํ•˜๋Š” ์•ฝ 3๊ฐœ์˜ x2 ํ”„๋กœ์„ธ์„œ ๋ช…๋ น์˜ ์—๋ฎฌ๋ ˆ์ด์…˜ ๋ฐ 87๊ฐœ์˜ Linux ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์›์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์–ด ์„ธํŠธ ๋ฐ RDTSCP.

๋˜ํ•œ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์„ ์‹œ๊ฐํ™”ํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์šฉ์„ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” Blink๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Blinkenlights ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ์—ญ ๋””๋ฒ„๊น… ๋ชจ๋“œ(Reverse-Debugging)๋ฅผ ์ง€์›ํ•˜๋Š” ๋””๋ฒ„๊ฑฐ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‹คํ–‰ ๊ธฐ๋ก์—์„œ ๋’ค๋กœ ์ด๋™ํ•˜๊ณ  ์ด์ „์— ์‹คํ–‰๋œ ์ง€์ ์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” C-library Cosmopolitan, Linux์šฉ ์„œ์•ฝ ๊ฒฉ๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ํฌํŠธ ๋ฐ Redbean ๋ฒ”์šฉ ์‹คํ–‰ ํŒŒ์ผ ์‹œ์Šคํ…œ๊ณผ ๊ฐ™์€ ๊ฐœ๋ฐœ์˜ ์ž‘์„ฑ์ž๊ฐ€ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ณ ์„ฑ๋Šฅ x86-64 ์—๋ฎฌ๋ ˆ์ดํ„ฐ์ธ Blink์˜ ์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค


์ถœ์ฒ˜ : opennet.ru

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