์ฒซ ๋ฒ์งธ ๋ฌธ์ fd *.*
์๋ง๋ฅผ ์ฐพ๋ ํ ์์ด๊ฐ ๋งํ๋ค์
"ํ์ผ ๋์คํฌ๋ฆฝํฐ๊ฐ ๋ญ์ผ?? ๋จ><"
ํ์ง๋ง ์๋ง๋ ๋ต์ด ์๊ณ ...
์ฐ๋ฆฌ๊ฐ ์๋ ค์ค์ผ ํ ๊ฑฐ ๊ฐ์ต๋๋ค
ssh ์ ์ ๋ฐฉ๋ฒ์ ๋ฌธ์ ์๊ฐ ๋ถ๋ถ์ ์น์ ํ๊ฒ ์ ํ์์ต๋๋ค. (intro.png)
fdํ์ผ์ setuid๊ฐ ๊ฑธ๋ ค์๊ณ , flagํ์ผ์ ์ฝ๊ธฐ ์ํด์ fdํ์ผ์ ๊ณต๋ตํด์ผ ํ ๋ฏํ๋ค์.
์ฝ๋๋ฅผ ๋ณด๋ฉด, buf๋ณ์์ "LETMEWIN"์ด๋ผ๋ ๋ฌธ์์ด์ด ๋ค์ด๊ฐ ์์ผ๋ฉด,
flag ํ์ผ์ ์ฝ์ด์ฌ ์ ์๊ฒ ๋ค์.
12๋ฒ ์ค์ ๋ณด๋ฉด read(fd, buf, 32);๋ผ๋ ์ฝ๋๊ฐ ์์ต๋๋ค.
์ฐ์ , read ํจ์๋ฅผ ์์์ผ๊ฒ ์ฃ ?
๊ตฌ๊ธ๋ง์ ํตํด ์ฝ๊ฒ ๋ณผ ์ ์๊ฒ ์ง๋ง, ์๊ฐํด ๋๋ฆด ๋ฐฉ๋ฒ์ด ํ๋ ์๊ฐ๋ฌ๋ค์
๋ฐ๋ก linux man page์ ๋๋ค
์์ "man man"์ ์ ๋ ฅํด ๋ด ์๋ค.
์ค๋ช ๋ถ๋ถ์ ๋ณด๋ฉด section ์๊ฐ๊ฐ ๋์ค์ฃ
์ฌ๊ธฐ์ ์ง๋ฌธ, ์ง๊ธ ๋๊ฐ ์ด์๋จ์ ์์ด? system call์ธ read๋ฅผ ๊ฒ์ํ๋ ค๋ฉด ๋ช ๋ฒ section์ ์ฐธ์กฐํด์ผ ํ ๊น์?
q๋ฅผ ๋๋ฅด๊ณ , ๋ค์ ์๋ก ๋ณต๊ทํ์์๋ค
์์ "man 2 read"๋ฅผ ์ ๋ ฅํด ๋ด ์๋ค
์ง์ข~ ์ฌ์ค ๊ทธ๋ฅ man readํด๋ ๋จ
์ธ์๋ค์ ํ์ธํด ๋ด ์๋ค.
์ธ์ | fd | buf | count |
์ฉ๋ | ํ์ผ ๋์คํฌ๋ฆฝํฐ | ์ ์ฅ๋ ๋ณ์ | ํฌ๊ธฐ |
ํ์ผ ๋์คํฌ๋ฆฝํฐ? ๋ฌธ์ intro์์ ๋ณธ๊ฑฐ ๊ฐ๊ธฐ๋..?
์ํคํผ๋์๋ฅผ ๋ณด๋ฉฐ๋
0 → standard input
1 → standard output
2 → standard error
๋ผ๊ณ ๋์ด์๋ค์.
์ฝ๊ฒ ๋งํด์, "0์ ์ ๋ ฅ(ํค๋ณด๋) 1์ ์ถ๋ ฅ(๋ชจ๋ํฐ) 2๋ ์๋ฌ"๋ผ๋ ์๋ฆฌ์ ๋๋ค.
์ฐ๋ฆฌ๋ buf ๋ณ์์ "LETMEWIN"์ ์ ๋ ฅํด ๋ฃ์ด์ผ ํ๋, fd๋ 0์ด ๋์ด์ผ๊ฒ ๋ค์ ใ ใ
๋ค์ ์ฝ๋๋ก ๋์์์, 10๋ฒ์งธ fd๋ฅผ ์ธํ ํ๋ ๋ผ์ธ์ ๋ด ์๋ค.
10 int fd = atoi( argv [1] ) - 0x1234;
atoi๋ ๋ ๋ญ์ฌ..
'str → int' ํ ๋ณํ ํจ์๋ค์^^
๊ทธ๋ ๋ด, fd๊ฐ 0์ด ๋๊ธฐ ์ํด์ argv [1]์ 0x1234๋ฅผ ์ ๋ ฅํด ์ฃผ์ด์ผ๊ฒ ๋ค์.
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ atoi๋ 10์ง์ ํ์์ผ๋ก ๋ฐ๊ฟ ์ฃผ๊ธฐ ๋๋ฌธ์, "4660"์ ์ ๋ ฅํด ์ฃผ์ด์ผ๊ฒ ์ฃ ?
+) 0x1234 == 4660
๋ง์ง๋ง์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์คํํด์ผ ํ ์ ์ฐจ๋ฅผ ์ ๋ฆฌํด๋ด ์๋ค.
argv [1]์ "4660" ์ ๋ ฅ | → | "LETMEWIN" ์ ๋ ฅ |
๋ ์ธ ๊ณ .