๐ ShellKit (libc + pysh)
June 27, 2025 ยท View on GitHub
echo๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง, ์ ธ์์ ์์คํ ์ฝ๊น์ง Python์ผ๋ก ๋จ๊ณ๋ณ ์ถ์ .
English | ็ฎไฝไธญๆ | ๆฅๆฌ่ช | ํ๊ตญ์ด
๐ ๊ฐ์
ShellKit์ Unix ์คํ์ผ์ ๊ต์ก์ฉ ํฐ๋ฏธ๋ ํดํท์ผ๋ก, ๋ ๊ฐ์ ํ์ ํ๋ก์ ํธ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
- Libc: Python ์ผ๋ก ๊ตฌํํ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ฎฌ๋ ์ด์
.
syscall,write,printf๋ฑ์ ํฌํจํ๋ฉฐ, ์ ์ ๋ชจ๋์์ ์ปค๋ ๋ชจ๋๋ก์ ํ๋ฆ์ ์๊ฐํํฉ๋๋ค. - Pysh:
Libc์์ ๊ตฌ์ถ๋ ๋ํํ ์ ธ. ๋ด๋ถ ๋ช ๋ น์ด, REPL, ๊ณ์ธต๊ฐ ์ถ์ ๊ธฐ๋ฅ๊ณผ ๋ค๊ตญ์ด ์ง์์ ์ ๊ณตํฉ๋๋ค. ์์คํ ํ๋ก๊ทธ๋๋จธ์ ํฐ๋ฏธ๋ ๋ง๋์๋ฅผ ์ํ ๋๊ตฌ์ ๋๋ค.
macOS ์ Linux ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ, Arm64 ๋ฐ x86_64 ์ํคํ ์ฒ๋ฅผ ์ง์ํฉ๋๋ค.
โจ ๊ธฐ๋ฅ
Pysh
- ๐ง ๋ด์ฅ ๋ช
๋ น์ด (
cd,echo,pwd,env๋ฑ) - ๐งต ๋ค๊ตญ์ด ์ง์ (์/์ค/์ผ/ํ ๋งค๋ด์ผ ์ ๊ณต)
- ๐ ๊ณ์ธต ๊ฐ ํธ๋ ์ด์ฑ (๋ช ๋ น ํ์ฑ โ libc ํจ์ โ C syscall)
- ๐งฉ ์กฐํฉ ๊ฐ๋ฅํ REPL ์คํ ๋ชจ๋ธ
- ๐ ํ๋ฌ๊ทธ์ธ ๊ธฐ๋ฐ ๋ช ๋ น ๋ฑ๋ก ์์คํ
Libc
- ๐จ๏ธ ์ปค์คํ
printf์์ง (%s,%d,%f๋ฐ ์ด์ค์ผ์ดํ ์ํ์ค ์ง์) - ๐ Python โ C
syscall๋ธ๋ฆฟ์ง (syscall/syslib.so์ฌ์ฉ) - ๐งช
pytestํ ์คํธ ํฌํจ, ํต์ฌ ํจ์ ์ฑ๋ฅ ๋ฒค์น๋งํฌ ์ ๊ณต
๐ฆ ์ค์น ๋ฐฉ๋ฒ
Python 3.10 ์ด์ ํ์
pip๋ก ์ค์น:
pip install shellkit
์ค์น ํ ๋ค์ ๋ช ๋ น์ผ๋ก ์คํ:
pysh
๐ ์ฌ์ฉ๋ฒ
pysh [์ต์
๋ค]
๋ช ๋ น์ค ์ต์
| ์ต์ | ์ค๋ช |
|---|---|
--command | ๋จ์ผ ๋ช ๋ น ์คํ |
--no-banner | ์์ ๋ฐฐ๋ ์ถ๋ ฅ ์๋ต |
--no-reminder | ํด์ ์๋ฆผ ๋นํ์ฑํ |
--quiet | ์กฐ์ฉํ ๋ชจ๋ (์ต์ ์ถ๋ ฅ) |
--safe | ์์ ๋ชจ๋ (rm -rf / ๋ฑ์ ์ํ ๋ช
๋ น ์ฐจ๋จ) |
--debug | ์ ธ ๋ช ๋ น ๋๋ฒ๊น ์ ๋ณด ํ์ |
--trace-echo | echo, printf์ libc ํธ์ถ ๊ฒฝ๋ก ์ถ์ |
๋์๋ง ๋ณด๊ธฐ:
pysh --help
๐ ์์ ๋ฐ ํํ ๋ฆฌ์ผ
ShellKit์ ์ค์ ๋์์ ๋ณด๊ณ ์ถ์ผ์ ๊ฐ์? ํฌ๊ด์ ์ธ ์์ ๋ค์ ํ์ธํด๋ณด์ธ์:
โ ์์ ๋ฐ ๋ฐ๋ชจ - ๊ธฐ๋ณธ๋ถํฐ ๊ณ ๊ธ ๊ธฐ๋ฅ๊น์ง, ์ค์ ํฐ๋ฏธ๋ ์ธ์
๋ค๊ตญ์ด ๋ฐ๋ชจ, ๋๋ฒ๊น ํํ ๋ฆฌ์ผ, ๊ณ ๊ธ printf ํฌ๋งคํ ์ด ํฌํจ๋์ด ์์ต๋๋ค!
๐ฆ ํ๋ก์ ํธ ๊ตฌ์กฐ (์ผ๋ถ)
shellkit/
โโโ native/ # C๋ก ์์ฑ๋ syscall ๊ตฌํ
โโโ shellkit/ # ๋ฉ์ธ ํจํค์ง
โ โโโ syscall/ # Python์์ ํธ์ถํ๋ ctypes ๊ธฐ๋ฐ ๋ํผ
โ โโโ libc/ # ์ปค์คํ
libc (printf, write, exit ๋ฑ)
โ โโโ shell/ # ํต์ฌ ์์ง, ๋ด์ฅ ๋ช
๋ น์ด, REPL ์คํ๊ธฐ
โ โโโ inspector/ # ๋๋ฒ๊ทธ ๋ฐ ํธ๋ ์ด์ฑ ๋๊ตฌ
โ โโโ i18n/ # ๋ค๊ตญ์ด ์ง์ ๋ฐ ๋ฒ์ญ ๋ชจ๋
โโโ benchmarks/ # ์ฑ๋ฅ ๋ฒค์น๋งํฌ
โโโ examples/ # ์ฌ์ฉ ์์ ๋ฐ ๋ฐ๋ชจ ๋ก๊ทธ
โโโ tests/ # ํ
์คํธ ์ค์ํธ
๐งฉ ์ง์ ํ๋ซํผ (syslib.so)
| ํ๋ซํผ | ์ง์ ์ฌ๋ถ | ์ค๋ช |
|---|---|---|
| Linux x86_64 | โ ์ง์ | rax = 1 + syscall ๋ฐฉ์ |
| Linux ARM64 | โ ์ง์ | x8 = 64 + svc #0 ๋ฐฉ์ |
| macOS Intel (x86) | โ ์ง์ | rax = 0x2000004 + syscall ๋ฐฉ์ |
| macOS ARM64 (M1/M2/M3) | โ ์ง์ | syscall(SYS_write, ...) ๋ฐฉ์์ผ๋ก ๋ํ ์ฒ๋ฆฌ |
| Windows | โ ๋ฏธ์ง์ | Windows๋ syscall() ์ธํฐํ์ด์ค๊ฐ ์์ |
๐งญ ๋ก๋๋งต
ShellKit ์ ์ด๋ฏธ ์์ ์ ์ด๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ ์ํ์ง๋ง, ์์ผ๋ก ์๋์ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ณํํ๊ณ ์์ต๋๋ค:
- ๐ ํ๋ฌ๊ทธ์ธ ์์คํ : ์ฌ์ฉ์ ์ ์ ๋ด์ฅ ๋ช ๋ น์ด, ๋ณ์นญ, ํจ์ ๋ฑ์ ๋ฑ๋กํ ์ ์๋๋ก ์ง์
- ๐ง ๋ฅ์ฝํน ๋ชจ๋: eBPF ๋ ์ ์์ค ์์คํ ํธ์ถ ์ถ์ ์ ์ํ ์คํ์ ์ธ ๊ธฐ๋ฅ
- ๐งณ ์๊ตฌ ํ๋กํ ์ ์ฅ: ํ๊ฒฝ ๋ณ์, ์ ธ ํ์คํ ๋ฆฌ, ์ปค์คํ ์ค์ ๋ฑ์ ์ ์ฅ
- ๐งช ๋ ๋ง์ ๋ด์ฅ ๋ช
๋ น์ด:
ls,cat,grep๊ณผ ๊ฐ์ ์ผ๋ฐ ๋ช ๋ น์ด๋ฅผ ์ถ๊ฐ - ๐ก ๋ฉํฐ๋ผ์ธ ์คํฌ๋ฆฝํธ ์คํ: ์ฌ๋ฌ ์ค์ ๋ช ๋ น์ด๋ ์คํฌ๋ฆฝํธ ๋ธ๋ก์ ํ ๋ฒ์ ์คํ ๊ฐ๋ฅํ๊ฒ
์ด ๊ธฐ๋ฅ๋ค์ด ํฅ๋ฏธ๋กญ๋ค๋ฉด, ๋์ค์ปค์
์ ์ด์ด๋ณด์๊ฑฐ๋ PR ์ ๋ณด๋ด์ฃผ์ธ์.
์์ด๋์ด๋ ์ฝ๋๋ , ๋ชจ๋ ํํ์ ๊ธฐ์ฌ๋ฅผ ํ์ํฉ๋๋ค!
๐ฌ ๊ด์ฌ์ ๊ธฐ์ฌ๋ก ์ ํํ์ธ์ โ ShellKit ์ ์ปค๋ฎค๋ํฐ์ ๋ชฉ์๋ฆฌ์ ํจ๊ป ์ฑ์ฅํฉ๋๋ค.
๐ ๋ณ๊ฒฝ ๋ด์ญ
์์ธํ ๋ด์ฉ์ CHANGELOG.md ์ฐธ๊ณ .
๐ ๋ผ์ด์ ์ค
MIT ๋ผ์ด์ ์ค. ์์ธํ ๋ด์ฉ์ LICENSE๋ฅผ ํ์ธํ์ธ์.
๐ค ๊ฐ์ฌ์ ๋ง
๊ณ ์ Unix Shell ์ ์ฒ ํ์ ์๊ฐ์ ๋ฐ์ ๊ฐ๋ฐ.
๋ชจ๋ ์์คํ
ํ๋ก๊ทธ๋๋จธ๋ค๊ณผ ํฐ๋ฏธ๋ ์ ํธ๊ฐ ์ฌ๋ฌ๋ถ๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค.