kynoh
@kynoh
Reviews Written
2
Average Rating
5.0
Posts
Q&A
์ ์ถ๋ ฅ๊ฐ์ด f๊ฐ ๋์ฌ๊น์...
'%f' ๋ผ๊ณ ์ฐ์ ์ผํฉ๋๋ค. ์์ฑ์ ๋ถ์ f% ๋ผ๊ณ ์ฐ์ จ๋ค์ :) (์ฌ์ง)
- 0
- 1
- 379
Q&A
๋ฉ๋ชจ๋ฆฌ์ '์ฒซ ๋ฒ์งธ ์ฃผ์' ๋ฐ byte ๋จ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ ์์์ ๋ํ ์ง๋ฌธ
2022. 06. 20. ํน์ ๋ค๋ฅธ ๋ถ๋ค๋ ํท๊ฐ๋ฆฌ์๊ฑฐ๋ ๊ทธ๋ฌ์ค๊น๋ด ๋ฐฐ์ด ๊ฒ์ ํ์ฉํด์ ์๋ฌธ์๋ตํด๋ด ๋๋ค. :) Q1. ํฌ์ธํฐ ๋ณ์(ptr_a)๊ฐ ๋ณ์(a)์ ๋ํ์ฌ ์ ์ฅํ๋ ์ฒซ ๋ฒ์งธ ์ฃผ์๋, ๊ทธ ๋ณ์(a)๊ฐ memory์ ์ ์ฅ๋ ๋, ๊ฐ์ฅ ๋ง์ง๋ง์ ์ ์ฅ๋๋ 1 byte ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฃผ์๋ฅผ ์๋ฏธํ๋ ๊ฒ์ด ๋ง๋์? ์๋๋ค. pointer๊ฐ ์ ์ฅํ๋ memory address๋, ๋ณ์ a์ first address๋ฅผ ์๋ฏธํ๋ค.๊ทธ๋ ๋ค๋ฉด, a์ first address๋ ๋ฌด์์ผ๊น? Little Endian์ธ x86 intel CPU architecture์์๋ Low address์ ์๋ data๊ฐ Least Significant Byte์ ์ ์ฅ๋๋ค. (bit-value ์ญ์ least significant bit์์๋ถํฐ ์ ์ฅ๋๋ค.) ์๋์ ์คํฌ๋ฆฐ ์ท์์ a๋ 4 byte์ size๋ฅผ ๊ฐ์ง๋ค.๊ทธ๋ฌ๋ฏ๋ก, byte order๋ฅผ ๋ํ๋ด์๋ฉด, [MSB] 00 00 00 04 [LSB]๊ฐ ๋๋ค.little endian์ธ ํ์ฌ์ computer์์ data๊ฐ ์ ์ฅ๋๋ ์์๋, low address์ ์๋ byte data๊ฐ ๋จผ์ ์ ์ฅ๋๋ฏ๋ก, 0x004ffbc0์ด ๊ฐ๋ฆฌํค๋ memory space 04๊ฐ ๋จผ์ ์ ์ฅ๋์๋ค. (์ฌ์ง) ๊ทธ๋ฌ๋ฏ๋ก pointer ptr_a๊ฐ ์ ์ฅํ๋ a์ first address๋ ๊ฐ์ฅ ๋จผ์ ์ ์ฅ๋ ๊ณต๊ฐ์ ์๋ฏธํ๋ค. (์ฌ์ง) (์ง๋ฌธ ๋ด์ฉ ์ค) ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ๋จผ์ ์ ์ฅ๋ ๋ณ์์ธ a์ ์ฃผ์๋ b, c๋ณด๋ค ๋์ ์ฃผ์์ ์์นํ๊ณ ,b์ ์ฃผ์๋ c๋ณด๋ค ๋์ ์ฃผ์์ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด, ๋ณ์(a)์ 4 byte์ง๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๋ค์ ๋ํด์๋ ์ ์ฅ๋ ๋, ๊ฐ์ฅ ๋จผ์ ์ ์ฅ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋๋จธ์ง์ ๋นํด ๋์ ์ฃผ์์ ์์นํ๋ค๊ณ ์ถ๋ก ํ ์ ์์ต๋๋ค. Data๊ฐ ์ด๋ค memory block์ ์ ์ฅ๋ ๋๋ little endian๋ฐฉ์์ผ๋ก ์ ์ฅ๋์๋ค. [MSB] 00 00 00 04 [LSB] '04'๊ฐ low address์ธ byte์ด๋ฏ๋ก ๋จผ์ ์ ์ฅ๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ฒ ์ ์ฅ๋ data object์ memory address๋ Linux OS / GCC Compiler ๊ธฐ์ค์ผ๋ก stack์ ํ ๋น๋ ๋, memory address๊ฐ high to low์ ๋ฐฉํฅ์ฑ์ ๊ฐ์ง๊ฒ ๋๋ค. ์ฆ ๋จผ์ ์ ์ฅ๋ ๋ณ์a๊ฐ ๋์ค์ ์ ์ฅ๋ ํฌ์ธํฐ ๋ณ์ ptr_a๋ณด๋ค, high address๋ฅผ ๊ฐ์ง๋ค๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด ๋ฐฉํฅ์ฑ์ด ๋ณ์ a์ ๋ํ์ฌ, 'high address์ ์๋ '00'์ด ๋จผ์ ์ ์ฅ๋๋ค'๋ ๊ฒ์ ์๋ฏธํ์ง๋ ์๋๋ค. Data๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ธ endianness์ memory layout์์ address์ ๋ฐฉํฅ์ฑ์ ํผ๋ํ์ง ๋ง์. Q2. x64์์ debugging์ ์คํํ ๋, ๊ฐ์ฅ ๋์ค์ ์ ์ฅ๋๋ ๋ณ์๊ฐ ๊ฐ์ฅ ๋์ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ, ์ ๊ทธ๋ ์ต๋๊น? (ํ์ ๋ชจ ๊ต์๋ ๋ง์๋๋ก, OS / Compiler ์ ๋ฐ๋ผ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. Stack๊ณผ Heap์, data๋ค์ด memory๋ฅผ ํ ๋น๋ฐ์ ๋, ๊ทธ address์ ๋ฐฉํฅ์ฑ์ด ๋ค๋ฅด๋ค. ์ด variable๋ค์ ๋ชจ๋ stack์ allocation๋๋ค.Linux OS / GCC ๊ธฐ์ค์ผ๋ก from high to low address์ ๋ฐฉํฅ์ฑ์ ๋ฐ๋ผ ํ ๋น๋ ๊ฒ์ด๋ค.๊ทธ๋ ๋ค๋ฉด, [High Address Memory]a, b, c, ptr_a, ptr_b, ptr_c[Low Address Memory] ์ธ ๋ฐฉํฅ์ฑ์ ๋ณด์ผ ๊ฒ์ด๋ค. Linux OS๊ณ์ด์ธ Ubuntu OS / Clang Compiler๋ฅผ ํ์ฉํ๋ Online compiler replit์์ ํ์ธํด๋ณด์.) (์ฌ์ง) (๋จผ์ stack์ ์ ์ฅ๋ a๊ฐ High Address์ ์์นํ๊ณ ์๋ค.๋์ค์ ์ ์ฅ๋ ptr_c๋ Low Address์ ์์นํ๊ณ ์๋ค.)
- 0
- 2
- 613
Q&A
[(14. ๊ตฌ์กฐ์ฒด) - 9.๊ตฌ์กฐ์ฒด์ ํ ๋น ๋ฉ๋ชจ๋ฆฌ] - scanf()์ malloc()์ ์คํ ์์์ ๋ฐ๋ฅธ Heap Corruption Detected ์ค๋ฅ
์๋ฌธ์๋ตํฉ๋๋ค! malloc()์ ํ ๋, strlen()ํจ์์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋๋ฌธ์ scanf()ํจ์๋ฅผ ๋จผ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฑฐ๋ค์ ;; ๋ฌด์์์ ์ผ๋ก sizeof()์ฒ๋ผ ์๊ฐํ ์ค์์์ด์... ์์ source code์ฒ๋ผ scanf()๋ฅผ malloc()๋ณด๋ค ๋์ค์ callํ๊ฒ๋๋ฉด, strlen(buffer + 1) ์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ์ 1 byte๊ฐ ๋์ค๊ฒ ๋ฉ๋๋ค. _msize()ํจ์๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ๊ตฌํด๋ณด๋ฉด 1์ด ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๊ณ ๋์ scanf() ํจ์๋ก string์ ์ ๋ ฅ๋ฐ๊ฒ๋๋ฉด, strcpy()๋ฅผ callํ์ ๋, ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ณผํด์ string์ ๋ณต์ฌํ๊ฒ ๋ฉ๋๋ค. ์ฆ ํ ๋น ๋ฐ์ heap memory์ size๋ฅผ ์ด๊ณผํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก free()๋ก ํด์ ํ์ ๋, ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด์๋ค์. ๋ฐ๋ฉด์, scanf()๋ก ๋จผ์ string์ ์ ๋ ฅ๋ฐ์ผ๋ฉด, strlen(buffer + 1)๋ ์ ๋ ฅ๋ฐ์ ๋ฌธ์์ ์ + \0 ๋งํผ์ size๋ฅผ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ๋ด๋๊ฒ ๋๊ณ , ์ด ๋งํผ์ size๋ก heap์ ํ๋ณด๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ์ _msize()ํจ์๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ๊ตฌํด๋ณด๋ฉด, ์ ๋ ฅ๋ ๋ฌธ์์+1 ๋งํผ์ผ๋ก ๋์ค๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก strcpy()๋ฅผ callํ์ ๋, ํ ๋น ๋ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋งํผ ์ ์์ ์ธ copy๊ฐ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก free()ํจ์๋ฅผ callํ์ ๋, ์ ์์ ์ผ๋ก ํด์ ๊ฐ ๋ฉ๋๋ค. ์ฐธ๊ณ ๋ก _msize() ํจ์๋ VS์์๋ง ์ ๊ณต๋๋ ํจ์์ด๊ณ ํ์ค์ด ์๋๋ผ๊ณ ํฉ๋๋ค! VS Code๋ online compiler์์๋ ์ ์ ์์๋ํ๊ฑด์ง.. ๊ทธ๊ฑด ์ฌ์ํ ์๋ฌธ์ผ๋ก ๋จ์์๋ค์.
- 0
- 1
- 1.3K




