ν”Όλ“œλ‘œ λŒμ•„κ°€κΈ°
π—§π—›π—˜ π—–π—’π—‘π—‘π—˜π—–π—§π—œπ—’π—‘ π—•π—˜π—§π—ͺπ—˜π—˜π—‘ π—¨π—¦π—˜π—₯ 𝗣π—₯π—’π—šπ—₯𝗔𝗠𝗦 𝗔𝗑𝗗 𝗒𝗦 π—žπ—˜π—₯π—‘π—˜π—Ÿ
Dev.toDev.to
Infrastructure

μ‹œμŠ€ν…œ 콜이 μ‚¬μš©μž ν”„λ‘œκ·Έλž¨κ³Ό OS 컀널 κ°„μ˜ μ•ˆμ „ν•˜κ³  체계적인 톡신을 κ°€λŠ₯ν•˜κ²Œ ν•œλ‹€

π—§π—›π—˜ π—–π—’π—‘π—‘π—˜π—–π—§π—œπ—’π—‘ π—•π—˜π—§π—ͺπ—˜π—˜π—‘ π—¨π—¦π—˜π—₯ 𝗣π—₯π—’π—šπ—₯𝗔𝗠𝗦 𝗔𝗑𝗗 𝗒𝗦 π—žπ—˜π—₯π—‘π—˜π—Ÿ

Shariful Islam Sourav2026λ…„ 3μ›” 30일2λΆ„beginner

Context

μ‚¬μš©μž ν”„λ‘œκ·Έλž¨μ€ μ œν•œλœ κΆŒν•œλ§Œ λ³΄μœ ν•˜λ©° μ‹œμŠ€ν…œ 전체와 ν•˜λ“œμ›¨μ–΄μ— unrestricted accessλ₯Ό κ°€μ§„ 컀널 λͺ¨λ“œμ™€ λΆ„λ¦¬λ˜μ–΄ μžˆλ‹€. μ΄λŸ¬ν•œ 뢄리 κ΅¬μ‘°λŠ” μ‹œμŠ€ν…œ μ•ˆμ „μ„±μ„ 보μž₯ν•˜μ§€λ§Œ 직접적인 톡신 채널이 λΆ€μž¬ν•œ μƒνƒœλ₯Ό μ΄ˆλž˜ν•œλ‹€.

Technical Solution

  • μ‚¬μš©μž ν”„λ‘œκ·Έλž¨ β†’ ν‘œμ€€ 라이브러리 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μš”μ²­μ„ μƒμ„±ν•˜λŠ” κ³Όμ •
  • CPU β†’ trap λͺ…λ Ήμ–΄ μ‹€ν–‰ μ‹œ program counter와 register μƒνƒœλ₯Ό kernel stack에 μ €μž₯ν•˜λŠ” κ³Όμ •
  • ν•˜λ“œμ›¨μ–΄ β†’ trap λ°œμƒ μ‹œ privilege level을 user modeμ—μ„œ kernel mode둜 μ „ν™˜ν•˜λŠ” κ³Όμ •
  • OS β†’ trap table을 μ°Έμ‘°ν•˜μ—¬ ν•΄λ‹Ή μ‹œμŠ€ν…œ 콜의 entry pointλ₯Ό κ²°μ •ν•˜λŠ” κ³Όμ •
  • 컀널 λͺ¨λ“œ β†’ μ§€μ •λœ entry pointμ—μ„œ μš”μ²­λœ μž‘μ—…μ„ μ‹€ν–‰ν•˜λŠ” κ³Όμ •

Impact

λ³Έ μ•„ν‚€ν…μ²˜λŠ” μ‹œμŠ€ν…œ μ•ˆμ „μ„±κ³Ό κΈ°λŠ₯μ„±μ΄λΌλŠ” 두 κ°€μ§€ μƒμΆ©λ˜λŠ” λͺ©ν‘œλ₯Ό λ™μ‹œμ— λ‹¬μ„±ν•œλ‹€.

Key Takeaway

μ‹œμŠ€ν…œ μ½œμ€ 좔상적 κ°œλ…μ΄μ§€λ§Œ μ‹€μ œ κ΅¬ν˜„μ€ trapμ΄λΌλŠ” ν•˜λ“œμ›¨μ–΄ λͺ…λ Ήμ–΄λ₯Ό 톡해 이루어지며, 이 κ³Όμ •μ—μ„œ ν•˜λ“œμ›¨μ–΄μ™€ OSκ°€ ν˜‘λ ₯ν•˜μ—¬ privilege level을 μ „ν™˜ν•œλ‹€.


C ν”„λ‘œκ·Έλž¨μ—μ„œ printf() 호좜 μ‹œ write() μ‹œμŠ€ν…œ μ½œμ„ 톡해 OS μ»€λ„μ˜ display driver와 ν†΅μ‹ ν•˜λŠ” λ°©μ‹μœΌλ‘œ, μƒμœ„ 레벨 APIκ°€ μ‹œμŠ€ν…œ λ¦¬μ†ŒμŠ€ 접근을 μ•ˆμ „ν•˜κ²Œ μΆ”μƒν™”ν•œλ‹€

원문 읽기