๐ ์์คํ ํ๋ก๊ทธ๋๋ฐ
๐ซ 1
- 1.2 ์ปดํ์ผ ์์คํ
- ๋ชฉ์ ํ๋ก๊ทธ๋จ
- ์ฌ๋ฐฐ์น ๊ฐ๋ฅ ๋ชฉ์ ํ๋ก๊ทธ๋จ โ ๋ชฉ์ ํ์ผ
- ์คํ ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ โ ์คํ ํ์ผ
- Unix ์ปดํ์ผ
- gcc -o hello hello.c
- @ GNU Project
- @ Free SW : โfreeโ as in โfree speechโ, not โfree beerโ
- ๋ชฉ์ ํ๋ก๊ทธ๋จ
- 1.3 ์ปดํ์ผ ์์คํ
์ ์ดํด
- ํ๋ก๊ทธ๋จ ์ฑ๋ฅ ์ต์ ํ
- ๊ธฐ๊ณ์ด ์์ค ์ฝ๋ ์ดํด
- switch vs if-else, while vs for
- ๋งํน ์๋ฌ์ ์ดํดr
- Link-Time Error, Compile-Time Error
- ๋ณด์ ์ฝ์ ํํผ
- ๋ฒํผ ์ค๋ฒํ๋ก ๋ฒ๊ทธ Buffer Overflow Bugs
- ์ธํฐ๋ท๊ณผ ๋คํธ์ํฌ ์์ ๋ณด์ ์ฝ์ - security holes
- ํ๋ก๊ทธ๋จ ์ฑ๋ฅ ์ต์ ํ
- 1.4 ์ปดํจํฐ ์์คํ
- ํ๋์จ์ด ๊ตฌ์ฑ
- CPU
- CPU operations
- ์ ์ฌLoad - ์์ Operate - ์ ์ฅStore - ์ ํJump
- The process of Loading โhelloโ Code from KeyBoardโฆ @
- The process of Loading Executable File from Disk to MainMemoryโฆ @
- The process of Printing Output Stream from Memory to Monitor
- CPU
1.8 Computer System & Network
- 1.9 Hot Topics
- Amdahlโs law
- ์ปดํจํฐ ์์คํ ์ ์ผ๋ถ๋ฅผ ๊ฐ์ ํ ๋ ์ ์ฒด์ ์ผ๋ก ์ผ๋ง ๋งํผ์ ์ต๋ ์ฑ๋ฅ ํฅ์์ด ์๋์ง ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉ
- ์ด๋ค ์์คํ ์ ๊ฐ์ ํ์ฌ ์ ์ฒด ์์ ์ค a%์ ๋ถ๋ถ์์ k๋ฐฐ์ ์ฑ๋ฅ์ด ํฅ์๋์์ ๋ ์ ์ฒด ์์คํ ์์ ์ต๋ ์ฑ๋ฅ ํฅ์
- โ ๋ญ ์ต์ ํ ์์ผ์ผ ๋ ํจ์จ์ ์ธ๊ฐ?
- ๋์์ฑ ํ๋ก์ธ์ค : ํ๋์ ํ๋ก์ธ์์์ ๋ค์์ ํ๋ก์ธ์ค ์คํ
- ํ์ดํผ ์ค๋ ๋ฉ
- ํ๋์ ํ๋ก์ธ์๊ฐ ๋ ๊ฐ์ ๋ ผ๋ฆฌ์ ํ๋ก์ธ์ค์ฒ๋ผ ์๋ํ๋๋ก ํจ
- ์ปดํจํฐ ์ฒ๋ฆฌ์๋ ํฅ์
- i7์ ์ ์ฉ
- Abstraction of Computer System
- Virtual Machine - OS
- Processes
- Instruction Set Architecture - Processor
- Virtual Memory - Main Memory
- Files - I/O Devices
- Processes
- Virtual Machine - OS
- Amdahlโs law
๐ซ 2 Bits and Bytes
- ์ ๋ณด ํํ : ๋นํธ
- 2์ง์/16์ง์
- ๋ฐ์ดํธ ํํ
- ๋ถ ๋์
- C์์์ ํ๊ธฐ, C์ ์ฐ์ฐ
- ๋นํธ ๋จ์ ์ฐ์ฐ
- ๋ ผ๋ฆฌ์ฐ์ฐ
- ๋นํธ์ด๋์ฐ์ฐ
๐ซง 2.1 ์ ๋ณด์ ์ ์ฅ
- ๋ฐ์ดํธ ์ค์ฌ์ ๋ฉ๋ชจ๋ฆฌ ๊ถ
- ํ๋ก๊ทธ๋จ์ ๊ฐ์์ฃผ์ Virtual Addresses๋ก ํํ๋จ
- ๊ฐ๋ ์ ์์ฃผ ํฐ ๋ฐ์ดํธ ๋ฐฐ์ด
- ๊ฐ๊ฐ์ ๋ฐ์ดํธ๋ ์์ ์ ์ฃผ์๋ฅผ ๊ฐ์ง
- ๋ชจ๋ ์ฃผ์๋ค - ๊ฐ์์ฃผ์๊ณต๊ฐ
- ์์คํ
์ ํน์ โํ๋ก์ธ์คโ์ ์ฃผ์๊ณต๊ฐ Address Space์ ์ ๊ณต
- ํ๋ก์ธ์ค-์คํ์ค์ธ ํ๋ก๊ทธ๋จ
- ํ๋ก๊ทธ๋จ์ ์์ ์ ๋ฐ์ดํฐ๋ฅผ ์ด์(๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ๋ฐ์ดํฐ๋ ๋ค๋ฃจ์ง ์์)
- ์ปดํ์ผ๋ฌ+๋ฐํ์์์คํ
์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น Allocation
- ๊ฐ๊ฐ์ ํ๋ก๊ทธ๋จ ๊ฐ์ฒด๋ฅผ ์ด๋์ ์ ์ฅํ ๊ฒ์ธ๊ฐ?
- ํ๋ก๊ทธ๋จ ๊ฐ์ฒด: ํ๋ก๊ทธ๋จ ๋ฐ์ดํฐ, ๋ช ๋ น, ์ ์ด์ ๋ณด ๋ฑ
- Multiple Mechanisms: static, stack, and heap
- ์ด๋ ํ ๊ฒฝ์ฐ์๋ ๋จ์ผ ๊ฐ์์ฃผ์๊ณต๊ฐ ๋ด์ ๋ชจ๋ ํ ๋น
- ๊ฐ๊ฐ์ ํ๋ก๊ทธ๋จ ๊ฐ์ฒด๋ฅผ ์ด๋์ ์ ์ฅํ ๊ฒ์ธ๊ฐ?
- ํ๋ก๊ทธ๋จ์ ๊ฐ์์ฃผ์ Virtual Addresses๋ก ํํ๋จ
๊ฐ์์ฃผ์ = ๋ ผ๋ฆฌ์ฃผ์
- 16์ง์ ํํ : ๋ฐ์ดํธ ๊ฐ์ ์ธ์ฝ๋ฉ
- Byte = 8 bits
- Binary: 00000000 ~ 111111111
- Decimal: 0 ~ 255
- 2์ง์๋ ๋๋ฌด ๊ธธ๊ณ , 10์ง์๋ ๋นํธ ํจํด ๋ณํ์ด ์ด๋ ค์
- 1๋ฐ์ดํธ: Hexadecimal 00 ~ FF
- ๋ฐ์ 16 ์ซ์ ํํ
- Use Characters โ0โ ~ โ9โ ~ โAโ ~ โFโ
- Write FA1D37B in C as
- 0xFA1D37B, 0xfa1d37b
- 0xC97B = 1100 1001 0111 1011
- Byte = 8 bits
- ์ปดํจํฐ์ Words
- ์ปดํจํฐ๋ ์๋ํฌ๊ธฐ๋ฅผ ๊ฐ๋๋ค
- ์ ์ ๋ฐ์ดํฐ๋ ์ฃผ์์ ๋ช ๋ชฉ์ ํฌ๊ธฐ
- ํ์ฌ ๋๋ถ๋ถ์ ์ปดํจํฐ๋ 32bits(4 Bytes) ์๋
- 4GB ๋ฐ์ดํธ๋ก ์ฃผ์๋ฅผ ํ์
- ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅด ์ฌ์ฉํ๋ ์์ฉ์๊ฒ ์์ ์ ์์
- ์ต์ ์์คํ
์ 64Bits (8Bytes) Word
- 16 Exabytes์ ์ ์ฌ์ ์ฃผ์ ๊ณต๊ฐ
- x86 - 64 ์ปดํจํฐ 48bit ์ฃผ์ ์ง์ : 256 Terabytes
- ์ปดํจํฐ๋ ๋ค์์ ๋ฐ์ดํฐ ํ์ ์ง์
- Typical 32-bit, Intel IA32, x86-64 ๋ณ ๋ฐ์ดํฐ ํฌ๊ธฐ
- ํนํ int, pointer
- Typical 32-bit, Intel IA32, x86-64 ๋ณ ๋ฐ์ดํฐ ํฌ๊ธฐ
- ์ฃผ์ ์ง์ ๊ณผ ๋ฐ์ดํธ ์์
- ๋ค์ค ๋ฐ์ดํธ (e.g. intergers)์ ํํ๋๋ ๊ฐ์ฒด์ ๋ํ์ฌ, ๋ค์ ๋ ๊ฐ์ง ์ฌํญ ํ์
- ๊ฐ์ฒด์ ์ฃผ์๊ฐ ๋ฌด์์ธ๊ฐ?
- ๋ฉ๋ชจ๋ฆฌ ์์ ๋ฐ์ดํธ๋ค์ ์ด๋ค ์์๋ก ๋ฐฐ์น ํ๋๊ฐ:
- ๋ค์ค ๋ฐ์ดํธ ๊ฐ์ฒด
- ์ฐ์๋ ๋ฐ์ดํธ๋ก ์ ์ฅ
- ์์ ์ฃผ์: ์ฌ์ฉ๋ ๋ฐ์ดํธ์ ๊ฐ์ฅ ์์ ์ฃผ์
- ๋ค์ค ๋ฐ์ดํธ (e.g. intergers)์ ํํ๋๋ ๊ฐ์ฒด์ ๋ํ์ฌ, ๋ค์ ๋ ๊ฐ์ง ์ฌํญ ํ์
- ์๋ ์ค์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ฑ
- ์ฃผ์๋ ๋ฐ์ดํธ ์์น ๋ช
์ธ
- ์๋์ ์ฒซ ๋ฐ์ดํธ ์ฃผ์
- ์ฐ์๋ ์๋์ ์ฃผ์๋ ๋ค๋ฆ
- by 4 (32bit) ot 8 (64bit)
- i.e. 32bit : 0000, 0004, 0008, 0012
- i.e. 64bit : 0000, 0008
- ์ฃผ์๋ ๋ฐ์ดํธ ์์น ๋ช
์ธ
- Byte Ordering
- ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํธ๋ค์ผ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ
- ๊ท์น Conventions
- Big Endian : IBM, Sun
- ์ตํ์๋ฐ์ดํธ LSB๊ฐ ๊ฐ์ฅ ์์ ์ฃผ์์ ๋ฐฐ์น
- Come last
- Little Endian : x86
- ์ตํ์๋ฐ์ดํธ LSB๊ฐ ๊ฐ์ฅ ํ์ ์ฃผ์์ ๋ฐฐ์น
- Come First
- Big Endian : IBM, Sun
@ ๋คํธ์ํฌ๋ Big Endian ์ฐ๊ธฐ๋ก
@ ๋ฌ๊ฑ ์ฌ์ง?
- Byte Ordering Example
- Example
- ๋ณ์ x๋ 4Byte๊ฐ 0x1234567
- Address given by &x is 0x100
- Big Endian : 01 23 45 67
- Little Endian : 67 45 23 01
- Example
- Reading Byte - Reversed Listings
- ์ญ์ด์
๋ธ๋ฆฌ Disassembly
- ์ด์ง ๊ธฐ๊ณ์ด ์ฝ๋์ ๋ฌธ์ ํํ
- ๊ธฐ๊ณ ์ฝ๋๋ฅผ ์ฝ๋ ํ๋ก๊ทธ๋จ์ด ์์ฑ
- ์ญ์ด์
๋ธ๋ฆฌ Disassembly
@ ์์
ํฌ์ธํฐ ๊ฐ๋ค์ ์ปดํจํฐ์ ๋ฐ๋ผ ๋ค๋ฆ
Different compiler & machines assign different locations to objects
- Twoโs complement representation (Covered Later)
Solaris/SUN, Linux/x86-86, Linux/Alpha, IA32
- String์ ํ์
- C์์ ์คํธ๋ง String
- ๋ฌธ์๋ค์ ๋ฐฐ์ด๋ก ํ์
- ์์คํค ํ์์ผ๋ก ์ธ์ฝ๋
- ๋ฌธ์ ์งํฉ์ ํ์ค 7-bit ์ธ์ฝ๋ฉ
- ๋ฌธ์ โ0โ = ์ฝ๋ 0x30
- 10์ง์ ์ซ์ n = ์ฝ๋ 0x30 + n
- ๋ฌธ์์ด String ์ null ๊ฐ์ผ๋ก ์ข
๋ฃ
- Final Character = 0x00
- ํธํ์ฑ ๋ฌธ์
- Byte Ordering ์ ๋ฌธ์ ๊ฐ ์๋จ
- ๋ฐ์ดํฐ๋ 1 Byte ํฌ๊ธฐ
- Byte Ordering ์ ๋ฌธ์ ๊ฐ ์๋จ
- C์์ ์คํธ๋ง String
ASCII ์ฝ๋ ์ฐจํธ
- Different Machines Follow Different Conventions
- Word Size
- Byte Ordering
- Representations (Integer, Floating-point)
- Whren Prograaming, Be Aware Ofโฆ
- Type Casting & Mixed Signed/Unsigned Expressions
- Overflow
- Error Propagation
- Byte Ordering
์ ๋ณด์ ํํ๊ณผ ์ฒ๋ฆฌ
2.1.5 ์ฝ๋์ ํํ
ํ๋ก๊ทธ๋จ์ ๋ช ๋ น๋ค์ ๊ทธ ์์์ ๋ง๊ฒ ๋ถํธํํ ๊ฒ์ด๋ค.
๋ช ๋ น์ ์ฐ์ ์ฐ์ฐ, ๋ฉ๋ชจ๋ฆฌ ์ฝ๊ธฐ/์ฐ๊ธฐ, ์กฐ๊ฑด ๋ถ๊ธฐ๋ฑ์ ๊ฐ๋ณ์ ๋จ์ ์ฐ์ฐ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
๋ช
๋ น์ ๋ฐ์ดํธ๋ค๋ก ๋ถํธํ๋๋ค.
โ Alpha, Sun, Mac์ 4-Byte ๋ช
๋ น๋ค์ ์ฌ์ฉ : RISC, Reduced Instruction Set Computer
โ PC๋ ๊ฐ๋ณ ๊ธธ์ด ๋ช
๋ น๋ค ์ฌ์ฉ : CISC, Complex Instruction Set Compute
์๋ก ๋ค๋ฅธ ์ปดํจํฐ๋ค โ ์๋ก ๋ค๋ฅธ ๋ถํธํ ๋ฐฉ์ โ ์ด์ง์ฝ๋๋ ๋๋ถ๋ถ ํธํ์ฑ ์์
๊ทผ๋ณธ ๊ฐ๋ โ ํ๋ก๊ทธ๋จ ์ญ์ ๋ฐ์ดํธ์ ์ฐ์ Byte Sequences
- C ํจ์ โ ์ปดํ์ผ โ ๊ธฐ๊ณ์ด
- Machine Code (Byte Representations)
- Linux 32, Windows, Sun, Linux 64, โฆ
- ์๋ก ๋ค๋ฅธ ์ปดํจํฐ๋ค์ ์์ ํ ์๋ก ๋ค๋ฅธ ๋ช ๋ น๊ณผ ์ธ์ฝ๋ฉ ๋ฐฉ์ ์ฌ์ฉ
- Machine Code (Byte Representations)
- ๋ช
๋ น์ ํํ
- Sun์ 2, 4-Byte Instructions ์ฌ์ฉ
- PC๋ ๊ธธ์ด๊ฐ 1, 2, 3-Byte๋ค์ ๊ฐ๋ ๋ช
๋ น๋ค ์ฌ์ฉ
- Windows / Linux๋ ์์ ํ ๋ฐ์ด๋๋ฆฌ ํธํ์ฑ Binary Compatibility ์ ์ ๊ณต ๋ชปํจ
2.1.6 ๋ถ ๋์ - Boolean Algebra
- ๋
ผ๋ฆฌ์ ๋์์ ํํ
- True = 1, False = 0 ์ผ๋ก ๋ถํธํ
- ์งํฉ { 0, 1 } ์ ๋ํด์ ์ ์
@ 221015
show_bytes ์คํ ์์
1
2
3
int a = 15213;
printf("int a = 15213;\n");
show_bytes((pointer) &a, sizeof(int));
1
2
3
4
5
int a = 15213;
0x11ffffcb8 0x6d โ 0110 1101
0x11ffffcb9 0x3b โ 0011 1011
0x11ffffcba 0x00
0x11ffffcbb 0x00
@ 221021
2.2 ์ ์์ ํํ
2.2.1 C ์ ์ ํํ
- ์ฌ๋ฌ ์ ์ํ ๋ฐ์ดํฐ ํ์ ์ง์
- ๋ถํธ ์๋ ์ ์, unsigned ์์์ด
- ๋ถํธ ์๋ ์ ์ฐ, Signed number representations
- ๋น ๋์นญ ๋ฒ์๋ฅผ ๊ฐ์ง
- ์์ ๋ฒ์๊ฐ ์์๋ฒ์๋ณด๋ค 1 ํผ
- 2์ ๋ณด์(๋ถํธํ) ์ธ์ฝ๋ฉ
- ๋ถํธ ๋นํธ, 0 ์์, 1 ์์
- ๋ถํธ ์ฌ๋ถ์ ๋ฐ๋ฅธ ์ธ์ฝ๋ฉ
- ์์๋ ๋ถํธ ์ฌ๋ถ ๊ด๊ณ์์ด ๋๊ฐ์
- ์์๋ ๋ถํธ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค๋ฆ
2.2.2 C ์ ์ ๋ณํ, ์บ์คํ
- ๋น๋ถํธํ๊ณผ ๋ถํธํ ๊ฐ์ ๋ณํ Castings
- T2B โ B2U, B2U โ T2B
- ๋นํธ ํจํด์ ์ ์ง๋จ
- ์์๋ ๋ถ๋ณ (๋ถํธ ์ฌ๋ถ ๊ด๊ณ์์ด ๋๊ฐ์ผ๋๊น)
- ์์๋ ํฐ ์์ ๊ฐ์ผ๋ก ๋ณํ, (๋น๋ถํธํ์ ์ต๋๊ฐ + 1 = 2^๋นํธ์)๋งํผ์ ๋ณํ
- (int) or (unsigned)
- ์์ ๊ฐ ๋ค์ U ์ ๋ฏธ์ฌ ๋ถ์ด๋ฉด Unsigned
- ๋จ์ผ ์์(๋น๊ต ์ฐ์ฐ ํฌํจ)์ ๋ถํธํ ๋น๋ถํธํ ํผํฉ์, ๋ฌต์์ ์ผ๋ก ๋ถํธํ ๋น๋ถํธํ์ผ๋ก ๋ณํ
2.2.3 C ํ์ฅ, ์ ์ญ
- Zero Extension, ๋น๋ถํธ ์ ์์ 0 ๋ณต์ ํ์ฌ ํ์ฅํ๊ธฐ
- Sign Extension, ๋ถํธ ์ ์์ ๋ถํธ๋นํธ(MSB) ๋ณต์ ํ์ฌ ํ์ฅํ๊ธฐ
์์ ์ ์ ๋ฐ์ดํฐ ํ์์ ํฐ ๋ฐ์ดํฐ ํ์ผ๋ก ๋ณํํ ๋ ์ํ
- ์ซ์ ์ ์ญ์ผ๋ก ๊ฐ์ด ๋ณ๊ฒฝ๋ ์ ์์ โ ์ค๋ฒํ๋ก์ ํํ
- ๋น๋ถํธ ์ซ์ x์ ๋ํ์ฌ, x๋ฅผ k ๋นํธ ๋งํผ ์ ์ญ = x mod 2^k
- ๋ถํธ ์ซ์, mod์ ์ ์ฌํ๊ฒ
2.3 ์ ์์ฐ์ ์ฐ์ฐ
์ค์ ํฉ w+1 bits ์๊ตฌ๋จ
- ๋น๋ถํธํ ๋ง์
- Carry ์ถ๋ ฅ ๋ฌด์ โ Modular
- ๋ถํธํ ๋ง์
- MSB ๋ฒ๋ฆผ, ๋๋จธ์ง ๋นํธ๋ค์ 2์๋ณด์๋ก์ ์ ์๋ฅผ ๋ค๋ฃธ
- ์์ ์์ ์ค๋ฒํ๋ก ์ +- 2^(w-1)
- 2์ ๋ณด์ ๋ฐ์ (๋ณด์ & ์ฆ๊ฐ)
- ~x + 1 == -x (๋ง์ ์ ์ญ์ additive inverse = 0)
- ~x + x == 1โฆ == -1
- 0
- ~0 = 1โฆ == -1
- ~0 + 1 = 0โฆ == 0
- ๊ณฑ์
- ๋น๋ถํธํ : 2w๊น์ง ํ์
- i.e. 111 * 111 = 110001
- ๋ถํธํ
- ์ต์๊ฐ(์์) : 2w-1
- i.e. 100 * 011 = 001100
- ์ต๋๊ฐ(์์) : 2w (์ต์๊ฐ)^2 ์ธ ๊ฒฝ์ฐ์๋ง
- i.e. 100 * 100 = 010000
- ์ต์๊ฐ(์์) : 2w-1
- ๋น๋ถํธ, ์ค์ ๊ณฑ 2*w, ์์ w ๋นํธ ๋ฌด์, ๋ชจ๋๋ฌ ์ฐ์ฐ ์ ์ฉ๋จ
- ๋ถํธ, ์ค์ ๊ณฑ 2*w, ์์ w ๋นํธ ๋ฌด์, ๋น๋ถํธ ๊ฒฐ๊ณผ์ ํ์ ๋นํธ๋ค์ ๋์ผ
- ์์๋ฅผ ์ฌ์ฉํ ๊ณฑ์
- u ยซย k = u * 2^k
- u ยซย 3 = u * 8
- u ยซย 5 - u ยซย 3 = u * 24
- ๋๋ถ๋ถ ์ฌํํธ์ ๋ง์
์ด ๊ณฑ์
๋ณด๋ค ๋น ๋ฆ
- ์ปดํ์ผ๋ฌ๊ฐ ๊ณฑ์ ์ ์ฌํํธ ์ฐ์ฐ ์ฝ๋๋ก ์๋ ์์ฑ
- ๋น๋ถํธํ : 2w๊น์ง ํ์
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int mul12(int x)
{
return x * 12;
// ์๋์ ๊ฐ์ด ์ปดํ์ผ ๋๋ค
__asm
{
leal (&eax, %eax, 2), %eax
sall $2, %eax
}
// ์๋์ ๊ฐ์ ์๋ฏธ
// t โ x + x * 2
// return t << 2
}
- 2์ ๊ฑฐ๋ญ์ ๊ณฑ ๋๋์
- ๊ฒฐ๊ณผ ๋ด๋ฆผ
- i.e. 3.14 = 3, -3.14 = -4
- ๊ฒฐ๊ณผ ๋ด๋ฆผ
- Modular ์ฐ์ ์ฐ์ฐ ํํ๋ก ์ํ
- ์๋์ ๊ธธ์ด๊ฐ ์ ํ
- ๊ฐ๋ฅํ ๊ฐ์ ๋ฒ์๊ฐ ์ ํ
- ์ฐ์ฐ ๊ฒฐ๊ณผ๊ณผ Overflow์ผ์๋ ์์
- ๋น๋ถํธํ๊ณผ ๋ถํธํ(2์๋ณด์ ๋ฐฉ์)
- ๋์ผํ ๋นํธํจํด์ ๊ฐ์ง
๐ซ 3 ํ๋ก๊ทธ๋จ์ ์ปดํจํฐ ์์ค ํํ1 : ๊ธฐ์ด
- ๊ฐ์
- ์ญ์ฌ์ ๊ด์ฌ
- ํ๋ก๊ทธ๋จ์ ์ธ์ฝ๋ฉ
- ๋ฐ์ดํฐ ํ์
- ์ ๋ณด์ ์ ๊ทผ
๐ซง 3.0 ๊ฐ์
- ์ธํ
x86 ํ๋ก์ธ์
- ๋ฉํ/๋ฐ์คํฌํ/์๋ฒ ์์ฅ์ ์์ ์ฅ์
- ํ๋ก์ธ์ ์ค๊ณ์ ์งํ
- 1978 ์๊ฐ๋ 8086๊น์ง์ ์ญ ํธํ์ฑ ์ ๊ณต
- ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ผ ๋ ๋ง์ ํน์ง์ด ์ถ๊ฐ๋จ
- CISC ๊ตฌ์กฐ (Complex Instruction Set Computer)
- ์๋ก ๋ค๋ฅธ ํ์์ ๊ฐ๋ ๋ง์ ๋ช ๋ น๋ค์ ๊ฐ์ง
- RISC์ ์ฑ๋ฅ๊ณผ ์ฐจ์ด (Reduced Instruction Set Computers)
- ์ธํ ์ ์ฑ๋ฅ์ ๋์ด๊ณ ์๋ค, ์๋์ ์ํจ, ์ ์ ๋ ฅ
๋ฌด์ด์ ๋ฒ์น
๐ซง 3.1 ์ญ์ฌ์ ๊ด์ฌ
- Name, Date, Transistors, MHz
- 8086, 1978, 29K, 5~10
- ์ต์ด 16๋นํธ ํ๋ก์ธ์, IBM PC & DOS์ ๊ธฐ์ด
- 1MB ์ฃผ์๊ณต๊ฐ
- 386, 1985, 275K, 16-33
- ์ต์ด 32๋นํธ ํ๋ก์ธ์ (IA32)
- ์ ๋์ค ์คํ ๊ฐ๋ฅํ โFlat Addressingโ (์ ํ์ฃผ์) ๋ชจ๋ธ ์ถ๊ฐ
- Pentium 4E, 2004, 124M, 2800-3800
- ์ต์ด 64๋นํธ ํ๋ก์ธ์ (x86-64)
- Core2, 2006, 291M, 1060-3500
- ์ต์ด ๋ค์ค ์ฝ์ด ์ธํ ํ๋ก์ธ์
- Core i7, 2008,, 781M, 1700-3900
- 4 ์ฝ์ด
- 8086, 1978, 29K, 5~10
์ธํ ์ Hyper-Threading ๊ธฐ๋ฒ
Dual-Core Processor, ์ธํ
x86 ํ๋ก์ธ์
@ ์ฌ์ง
- x86 ํธํ ๊ธฐ์ข
(Clones) : Advanced Micro Devices (AMD)
- ์ญ์ฌ์ ์ผ๋ก
- AMD๋ ์ธํ ์ ํ๋ฐ์ฃผ์, ์ข ๋๋ฆฌ๋ ์ ๋ ด
- ๊ทธ ํ,
- DEC (Digital Equipment Corp.) ์์ ์ ์๊ธ ํ๋ก ์ค๊ณ์ ์์
- ๋ค๋ฅธ ํ์ฌ (ATI ๋ฑ)๋ค์ ํฉ๋ณ
- Opteron ๊ตฌ์ถ: Pentium 4์ ๊ฐํ ๊ฒฝ์์๋ก ๋ถ์
- ์์ ๋ค์ 64๋นํธ ํ์ฅ์ธ x86-64๋ฅผ ๊ฐ๋ฐ
- ์ญ์ฌ์ ์ผ๋ก
@ QuadCore Opteron
- Intel์ 64 bit
- 2001, IA32์์ IA64๋ก ๊ทผ๋ณธ์ ๋ณํ ์๋
- ์ ์ฒด์ ์ผ๋ก ๊ณผ๊ฑฐ์ ๋ค๋ฅธ ๊ตฌ์กฐ Itanium
- IA32๋ ๊ตฌํ ์ฝ๋ค๋ง ์คํ๋จ (์์ ํธํ์ฑ ์ ์ง)
- ์ฑ๋ฅ์ ์ค๋ง์
- 2003, AMD๋ ๋ฐ์ ๋ฐฉ์์ ์ฐธ์ฌ
- x86-64 (Now called โAMD64โ)
- Intel์ IA64์ ์ฃผ์์ ์ ๋
- Hard to admit mistake or that AMD is better
- 2004, ์ธํ
์ IA32์ ํ์ฅ์ธ EM64T๋ฅผ ๋ฐํ
- Extended Memory 64-bit Technology
- Almost identical to x86-64
- All but low-end x86 processors support x86-64
- But, lots of code stll runs in 32-bit mode
- 2001, IA32์์ IA64๋ก ๊ทผ๋ณธ์ ๋ณํ ์๋
๐ซง 3.2 ํ๋ก๊ทธ๋จ์ ์ธ์ฝ๋ฉ
- ์ ์
- Architecture (Also ISA : Instruction set Architecture)
- ์ด์ ๋ธ๋ฆฌ/๊ธฐ๊ณ์ด ์ฝ๋ ์์ฑ ๋๋ ์ดํด์ ํ์ํ ํ๋ก์ธ์ ์ค๊ณ ๋ถ๋ถ
- ์ : ๋ช ๋ น์ด ์งํฉ ๋ช ์ธ, ๋ ์ง์คํฐ
- Microarchitecture : implementation of the architecture
- ISA๊ฐ ํ๋ก์ธ์ค ์์ ๊ตฌํ๋๋ ๋ฐฉ๋ฒ
- ์ : ์บ์ฌ ํฌ๊ธฐ์ ์ฝ์ ์ฃผํ์
- ์ฝ๋ ํํ
- ๊ธฐ๊ณ์ฝ๋ : ํ๋ก์ธ์๊ฐ ์คํํ๋ ๋ฐ์ดํธ ์์ค ํ๋ก๊ทธ๋จ
- ์ด์ ๋ธ๋ฆฌ ์ฝ๋ : ๊ธฐ๊ณ์ฝ๋์ ํ ์คํธ ๋ฒ์
- Example ISAs (intel)
- ์ธํ : x86, IA32, Itanium, x86-64
- ARM :๊ฑฐ์ ๋ชจ๋ ์ด๋์ ํ์์ ์ฌ์ฉ
- Architecture (Also ISA : Instruction set Architecture)
- ์ด์
๋ธ๋ฆฌ/๊ธฐ๊ณ์ฝ๋ ๊ด์
- ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ณผ ์ ์๋ ์ํ
- PC Program Counter ํ๋ก๊ทธ๋จ ์นด์ดํฐ
- ๋ค์์ ์คํํ ๋ช ๋ น์ ์ฃผ์
- IEP ๋ผ ์นญํจ (IA32) or RIP (x86-64)
- ์ ์ ๋ ์ง์คํฐ ํ์ผ
- ๋น๋ฒํ ์ฌ์ฉ๋๋ ํ๋ก๊ทธ๋จ ๋ฐ์ดํฐ ์ ์ฅ
- ์กฐ๊ฑด์ฝ๋ ๋ ์ง์คํฐ
- ์ต๊ทผ์ ์ฐ์ ์ฐ์ฌ์ ๋ํ ์ํ์ ๋ณด ์ ์ฅ
- ์กฐ๊ฑด ๋ถ๊ธฐ๋ฅผ ์ํ์ฌ ์ฌ์ฉ๋จ (์ง๋ฆฌ๊ฐ)
- ๋ฉ๋ชจ๋ฆฌ
- Byte๋ก ์ฃผ์ํ๋ ๋ฐฐ์ด
- ์ฝ๋์ ์ฌ์ฉ์ ๋ฐ์ดํฐ
- ํ๋ก์์ ๋ฅผ ์ง์ํ๋ ์คํ
- PC Program Counter ํ๋ก๊ทธ๋จ ์นด์ดํฐ
- ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ณผ ์ ์๋ ์ํ
- C๋ฅผ ๋ชฉ์ ์ฝ๋๋ก ์ ํ
- i.e. p1.c p2.c
- gcc -Og p1.c p2.c -o p
- -o : ์ถ๋ ฅ ํ์ผ๋ช ์ ์ง์
- -Og ๊ธฐ๋ณธ์ ์ธ ์ต์ ํ ์ต์ (new to recent ver of GGCC)
- ํ์ผ p์ ๊ฒฐ๊ณผ ์ด์ง ํ์ผ ์ ์ฅ
text : C Program (p1.c, p2.c) (-S : ~.s ์ด์
๋ธ๋ฆฌ ํ์ผ ์์ฑ)
Compiler (gcc -Og -S)
text : Asm program (p1.s, p2.s)
Assembler (gcc or as)
binary : Object Program (p1.o, p2.o)
Linker (gcc or ld), With Static Livraries (.a, .lib in windows)
binary : Executable Progam (p)
- ์ด์
๋ธ๋ฆฌ์ ํน์ฑ : Data Types
- 1,2,4, 8 ๋ฐ์ดํธ์ ์ ์ํ ๋ฐ์ดํฐ
- ๋ฐ์ดํฐ ๊ฐ
- ์ฃผ์ (๋ฏธํ์ ํฌ์ธํฐ)
- ๋ถ๋์์์ ๋ฐ์ดํฐ๋ 4,8,10 Bytes
- ์ฝ๋
- ์ผ๋ จ์ ๋ช ๋ น๋ค์ ์ธ์ฝ๋ฉํ๋ ๋ฐ์ดํธ ์์๋ค
- ์งํฉ์ฒด (Aggregate: ๋ฐฐ์ด, ๊ตฌ์กฐ์ฒด) ํ์ ์์
- ๋ค๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ผ๋ก ๋ฐ์ดํธ๋ค์ ํ ๋น
- 1,2,4, 8 ๋ฐ์ดํธ์ ์ ์ํ ๋ฐ์ดํฐ
- ์ด์
๋ธ๋ฆฌ ํน์ฑ : ์ฐ์ฐ
- ALU์์ ์ฐ์ฐ์ ํ๋ ค๋ฉด ๋ฐ์ดํฐ๊ฐ ํ์
- ๋ ์ง์คํฐ ๋ฐ์ดํฐ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ์ฐ์ ํจ์ ์ํ
- ๋ฉ๋ชจ๋ฆฌ์ ๋ ์ง์คํฐ ์ฌ์ด์ ๋ฐ์ดํฐ ์ ์ก
- ๋ฉ๋ชจ๋ฆฌ์์ ๋ ์ง์คํฐ(CPU)๋ก ๋ฐ์ดํฐ ์ด๋ - Load (์ฌ์ด์ Bus)
- ๋ ์ง์คํฐ(CPU) ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ - Store (์ฌ์ด์ Bus)
- ์ ์ก ์ ์ด Transfer Control
- ํ๋ก์์ ๊น์ง ๋๋ ํ๋ก์์ ์์ ๋ฌด์กฐ๊ฑด ์ ํ/๋ฌด์กฐ๊ฑด ๋ถ๊ธฐ - to/from procecures, Like goto
- ์กฐ๊ฑด๋ถ๊ธฐ Conditional Branch, Like if else
์์ฆ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์คํธ๋ญ์ณ๋ ํ๋ก๊ทธ๋๋ฐ
goto๊ฐ ์์
๊ทผ๋ฐ ์ด์ ๋ธ๋ฆฌ๋ ์๋ค
gcc -o temp.c ์คํ ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ (์คํํ์ผ, object, ๋งํฌ๊น์ง ๋๋)
gcc -c temp.c ์ฌ๋ฐฐ์น ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ (๋ชฉ์ ํ์ผ, ๋งํฌ๋ ์๋ ๊ทธ๋ฅ ๋ชฉ์ ํ์ผ)
- ๋ชฉ์ ์ฝ๋ ์์ฑ
- Linux, gcc -Og -c temp.c
- -c ์ต์
- as์ ์ํ ์ด์ ๋ธ๊น์ง๋ง ์ํ
- ๋งํฌ๋ ๋ฏธ์ํ
- temp.o ํ์ผ ์ฐ์ถ
- n๋ฐ์ดํธ ์์ temp ๋ชฉ์ ์ฝ๋ ๋ด์ฅ (ํด๋ณด๋๊น n๋ฐ์ดํธ๋ผ๋ ๋ป)
- ๋ชฉ์ ์ฝ๋
- ์ด์
๋ธ๋ฌ (Assembler)
- .s๋ฅผ .o๋ก ๋ฒ์ญ
- ๋ช ๋ น์ด ๊ฐ๊ฐ์ ์ด์ง ์ธ์ฝ๋ฉ
- ๊ฑฐ์ ์๋ฒฝํ ์คํ ์ฝ๋
- ๋ค๋ฅธ ํ์ผ๋ค๊ณผ์ ์ฝ๋ ์ฐ๊ฒฐ (linkages)์ ๋น ์ง
- ๋ง์ปค (Linker)
- ํ์ผ๋ค ์ฌ์ด์ ์ฐธ์กฐ๋ฅผ ํด๊ฒฐ
- ์ ์ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์กฐํฉ (i.e. code for malloc, printf)
- ์ผ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋์ ์ผ๋ก ์ฐ๊ฒฐ (Dynamically Linked), ํ๋ก๊ทธ๋จ ์คํ ์ ๋งํน ๋ฐ์
- ์ด์
๋ธ๋ฌ (Assembler)
- ๋ชฉ์ ์ฝ๋์ ์ญ ์ด์
๋ธ
- Disassembled
- Disassembler
- objdump -d temp.o
- ๋ชฉ์ ์ฝ๋ ์กฐ์ฌ์ ์ ์ฉํ ๋๊ตฌ
- ์ผ๋ จ์ ๋ช ๋ น๋ค ๋นํธ ํจํด์ ๋ถ์
- ์ด์ ๋ธ๋ฆฌ ์ฝ๋์ ์ ์ฌํ ํด์ ์ฐ์ถ
- a.out(complete executable) ์ด๋ .oํ์ผ์ ์คํํ ์ ์์
- ์ญ์ด์
๋ธ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ
- Within gdb Debugger
- gdb temp
- disassemble temp
- Disassemble procedure
- x/
n
xb sumstore- Examine the n bytes starting at temp
- ์ญ์ด์
๋ธ ํ ์ ์๋ ๊ฒ์?
- ์คํ์ฝ๋๋ก ๋ฒ์ญ๋ ์ ์๋ ๊ฒ
- ์ญ์ด์ ๋ธ๋ฆฌ๋ ๋ฐ์ดํธ๋ฅผ ์กฐ์ฌํ๊ณ ์ด์ ๋ธ๋ฆฌ ์์ค๋ฅผ ์ฌ๊ตฌ์ฑ
- Reverse engineeering forbidden by MS End User License Agrement
๐ซง 3.3 ๋ฐ์ดํฐ ํ์
- ๋ฐ์ดํฐ ํ์
- @@ bit byte word, word ๊ธฐ์
- GAS (GNU ์ด์
๋ธ๋ฌ)์์ โ/โ์ ๋ถ์ด๋ ๋ฐ ๋ฌธ์ ์์
- FP๋ โ/โ์ ๋ถ์
- ์๋ํ๋ฉด, FP(๋ถ๋์์์ )๋ ์ ์์ ๋ค๋ฅธ ์ฐ์ฐ๊ณผ ๋ ์ง์คํฐ๋ฅผ ๊ฐ์ง
x86-64 c ๋ฐ์ดํฐ ํ์ ํฌ๊ธฐ (C, ์ธํ ๋ฐ์ดํฐ ํ์, ์ด์ ๋ธ๋ฆฌ-์ฝ๋ ์ ๋ฏธ์ฌ, ํฌ๊ธฐ)
๐ซง 3.4 ์ ๋ณด์ ์ ๊ทผ
@@ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๋ชจ๋
๐ซ _
*dest = t;
movq %rax, (%rbs)
0x40059e: 48 89 03
C Code
dest๊ฐ ์ง์ ํ ๊ณณ์ ๊ฐ t๋ฅผ ์ ์ฅ
Assembly Code
8 ๋ฐ์ดํธ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ด๋
x86-64 ์ฉ์ด๋ก Quad words
Operands t: ๋ ์ง์คํฐ %rax dest: ๋ ์ง์คํฐ %rbx *dest: ๋ฉ๋ชจ๋ฆฌ M[%rbx]
r = register
Object Code
3 ๋ฐ์ดํธ ๋ช ๋ น ์ฃผ์ 0x40059e์ ์ ์ฅ๋จ
(๋ฒ์ฉ ๋ ์ง์คํฐ)
64bit 16๊ฐ
32bit 8๊ฐ
์คํ ๊ฐ๋ฅ ํ์ผ ์์ฑ
์คํํ์ผ ์์ฑํ๋ ค๋ฉด ๋ง์ปค ํ์
One object file must contain main
Combines with static run-time livraries (e.g., printf)
Some libraries are dynamically linked (i.e. at execution)