์ด์ œ GCC์—๋Š” eBPF ์ปดํŒŒ์ผ์„ ์œ„ํ•œ ๋ฐฑ์—”๋“œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

GCC ์ปดํŒŒ์ผ๋Ÿฌ ์ œํ’ˆ๊ตฐ์— ํฌํ•จ๋จ ์ฑ„ํƒ ๋œ Linux ์ปค๋„์— ๋‚ด์žฅ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ eGMP. JIT ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์ปค๋„ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ์ฆ‰์‹œ ๊ธฐ๊ณ„ ๋ช…๋ น์–ด๋กœ ๋ณ€ํ™˜๋˜๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ ์„ฑ๋Šฅ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. eBPF๋ฅผ ์ง€์›ํ•˜๋Š” ํŒจ์น˜ ํ—ˆ์šฉ GCC 10 ๋ฆด๋ฆฌ์Šค๊ฐ€ ๊ฐœ๋ฐœ๋œ ์ง€์ ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

GCC์—๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ฐฑ์—”๋“œ ์™ธ์—๋„ eBPF์šฉ libgcc ํฌํŠธ์™€ ์ปค๋„ ์ œ๊ณต ๋กœ๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ eBPF ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ELF ํŒŒ์ผ ์ƒ์„ฑ์šฉ ๋„๊ตฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. GCC์—์„œ eBPF๋ฅผ ์ง€์›ํ•˜๋Š” ํŒจ์น˜๋Š” ์ด๋ฏธ Oracle์˜ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ณต GNU binutils์˜ eBPF ์ง€์›. GDB์šฉ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์™€ ํŒจ์น˜๋„ ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด eBPF ํ”„๋กœ๊ทธ๋žจ์„ ์ปค๋„์— ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ ๋„ ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

eBPF์šฉ ํ”„๋กœ๊ทธ๋žจ์€ C ์–ธ์–ด์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์œผ๋กœ ์ •์˜๋˜๊ณ  ์ปดํŒŒ์ผ๋˜์–ด ์ปค๋„์— ๋กœ๋“œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ํ•˜๊ธฐ ์ „์— eBPF ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ํ—ˆ์šฉ๋œ ๋ช…๋ น์–ด์˜ ์‚ฌ์šฉ์— ๋Œ€ํ•ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๊ณ  ์ฝ”๋“œ์— ํŠน์ • ๊ทœ์น™(์˜ˆ: ๋ฃจํ”„ ์—†์Œ)์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ฒ˜์Œ์—๋Š” LLVM ๊ธฐ๋ฐ˜ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Linux์—์„œ eBPF๋ฅผ ์ปดํŒŒ์ผํ–ˆ์Šต๋‹ˆ๋‹ค. GCC์˜ eBPF ์ง€์›์€ ์ถ”๊ฐ€ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ ๋„ ํ•˜๋‚˜์˜ ํˆดํ‚ท์„ ์‚ฌ์šฉํ•˜์—ฌ Linux ์ปค๋„๊ณผ eBPF ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค.

eBPF ํ”„๋กœ๊ทธ๋žจ ํ˜•ํƒœ๋กœ ๋„คํŠธ์›Œํฌ ์ž‘์—… ํ•ธ๋“ค๋Ÿฌ ์ƒ์„ฑ, ํŠธ๋ž˜ํ”ฝ ํ•„ํ„ฐ๋ง, ๋Œ€์—ญํญ ๊ด€๋ฆฌ, ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ๋ง, ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์ฐจ๋‹จ, ์•ก์„ธ์Šค ์ œ์–ด, ์ž‘์—… ๋นˆ๋„ ๋ฐ ์‹œ๊ฐ„ ๊ณ„์‚ฐ, kprobes/uprobes/tracepoints๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”์  ์ˆ˜ํ–‰ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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