ํฌ์ŠคํŠธ

๐ŸŒ‘ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๐Ÿ’ซ 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
  • 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

๐Ÿ’ซ 2 Bits and Bytes


  • ์ •๋ณด ํ‘œํ˜„ : ๋น„ํŠธ
  • 2์ง„์ˆ˜/16์ง„์ˆ˜
  • ๋ฐ”์ดํŠธ ํ‘œํ˜„
  • ๋ถˆ ๋Œ€์ˆ˜
  • C์—์„œ์˜ ํ‘œ๊ธฐ, C์˜ ์—ฐ์‚ฐ
    • ๋น„ํŠธ ๋‹จ์œ„ ์—ฐ์‚ฐ
    • ๋…ผ๋ฆฌ์—ฐ์‚ฐ
    • ๋น„ํŠธ์ด๋™์—ฐ์‚ฐ

๐Ÿซง 2.1 ์ •๋ณด์˜ ์ €์žฅ

  • ๋ฐ”์ดํŠธ ์ค‘์‹ฌ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ถ
    • ํ”„๋กœ๊ทธ๋žจ์€ ๊ฐ€์ƒ์ฃผ์†Œ Virtual Addresses๋กœ ํ‘œํ˜„๋จ
      • ๊ฐœ๋…์ƒ ์•„์ฃผ ํฐ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด
      • ๊ฐ๊ฐ์˜ ๋ฐ”์ดํŠธ๋Š” ์ž์‹ ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง
      • ๋ชจ๋“  ์ฃผ์†Œ๋“ค - ๊ฐ€์ƒ์ฃผ์†Œ๊ณต๊ฐ„
    • ์‹œ์Šคํ…œ์€ ํŠน์ • โ€œํ”„๋กœ์„ธ์Šคโ€์— ์ฃผ์†Œ๊ณต๊ฐ„ Address Space์„ ์ œ๊ณต
      • ํ”„๋กœ์„ธ์Šค-์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ
      • ํ”„๋กœ๊ทธ๋žจ์€ ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์šด์˜(๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š์Œ)
    • ์ปดํŒŒ์ผ๋Ÿฌ+๋Ÿฐํƒ€์ž„์‹œ์Šคํ…œ์€ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น Allocation
      • ๊ฐ๊ฐ์˜ ํ”„๋กœ๊ทธ๋žจ ๊ฐ์ฒด๋ฅผ ์–ด๋””์— ์ €์žฅํ•  ๊ฒƒ์ธ๊ฐ€?
        • ํ”„๋กœ๊ทธ๋žจ ๊ฐœ์ฒด: ํ”„๋กœ๊ทธ๋žจ ๋ฐ์ดํ„ฐ, ๋ช…๋ น, ์ œ์–ด์ •๋ณด ๋“ฑ
      • Multiple Mechanisms: static, stack, and heap
      • ์–ด๋– ํ•œ ๊ฒฝ์šฐ์—๋„ ๋‹จ์ผ ๊ฐ€์ƒ์ฃผ์†Œ๊ณต๊ฐ„ ๋‚ด์— ๋ชจ๋‘ ํ• ๋‹น

๊ฐ€์ƒ์ฃผ์†Œ = ๋…ผ๋ฆฌ์ฃผ์†Œ

  • 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
  • ์ปดํ“จํ„ฐ์˜ Words
    • ์ปดํ“จํ„ฐ๋Š” ์›Œ๋“œํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค
    • ์ •์ˆ˜ ๋ฐ์ดํ„ฐ๋‚˜ ์ฃผ์†Œ์˜ ๋ช…๋ชฉ์ƒ ํฌ๊ธฐ
    • ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„์˜ ์ปดํ“จํ„ฐ๋Š” 32bits(4 Bytes) ์›Œ๋“œ
      • 4GB ๋ฐ”์ดํŠธ๋กœ ์ฃผ์†Œ๋ฅผ ํ•œ์ •
      • ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅด ์‚ฌ์šฉํ•˜๋Š” ์‘์šฉ์—๊ฒ ์ž‘์„ ์ˆ˜ ์žˆ์Œ
    • ์ตœ์‹  ์‹œ์Šคํ…œ์€ 64Bits (8Bytes) Word
      • 16 Exabytes์˜ ์ž ์žฌ์  ์ฃผ์†Œ ๊ณต๊ฐ„
      • x86 - 64 ์ปดํ“จํ„ฐ 48bit ์ฃผ์†Œ ์ง€์› : 256 Terabytes
    • ์ปดํ“จํ„ฐ๋Š” ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ ํ˜•์‹ ์ง€์›
      • Typical 32-bit, Intel IA32, x86-64 ๋ณ„ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ
        • ํŠนํžˆ int, pointer
  • ์ฃผ์†Œ ์ง€์ •๊ณผ ๋ฐ”์ดํŠธ ์ˆœ์„œ
    • ๋‹ค์ค‘ ๋ฐ”์ดํŠธ (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 ์“ฐ๊ธฐ๋กœ
@ ๋‹ฌ๊ฑ€ ์‚ฌ์ง„?

  • 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
  • Reading Byte - Reversed Listings
    • ์—ญ์–ด์…ˆ๋ธ”๋ฆฌ 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 ํฌ๊ธฐ
  • 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, โ€ฆ
      • ์„œ๋กœ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ๋“ค์€ ์™„์ „ํžˆ ์„œ๋กœ ๋‹ค๋ฅธ ๋ช…๋ น๊ณผ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹ ์‚ฌ์šฉ
  • ๋ช…๋ น์˜ ํ‘œํ˜„
    • 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 } ์— ๋Œ€ํ•ด์„œ ์ •์˜

Bit Wise Operate


@ 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
    • ๋น„๋ถ€ํ˜ธ, ์‹ค์ œ๊ณฑ 2*w, ์ƒ์œ„ w ๋น„ํŠธ ๋ฌด์‹œ, ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ ์ ์šฉ๋จ
    • ๋ถ€ํ˜ธ, ์‹ค์ œ๊ณฑ 2*w, ์ƒ์œ„ w ๋น„ํŠธ ๋ฌด์‹œ, ๋น„๋ถ€ํ˜ธ ๊ฒฐ๊ณผ์™€ ํ•˜์œ„ ๋น„ํŠธ๋“ค์€ ๋™์ผ
    • ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๊ณฑ์…ˆ
      • u ยซย k = u * 2^k
      • u ยซย 3 = u * 8
      • u ยซย 5 - u ยซย 3 = u * 24
      • ๋Œ€๋ถ€๋ถ„ ์‰ฌํ”„ํŠธ์™€ ๋ง์…ˆ์ด ๊ณฑ์…ˆ๋ณด๋‹ค ๋น ๋ฆ„
        • ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ณฑ์…ˆ์„ ์‰ฌํ”„ํŠธ ์—ฐ์‚ฐ ์ฝ”๋“œ๋กœ ์ž๋™ ์ƒ์„ฑ
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 ์ฝ”์–ด

์ธํ…”์˜ 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

๐Ÿซง 3.2 ํ”„๋กœ๊ทธ๋žจ์˜ ์ธ์ฝ”๋”ฉ

  • ์ •์˜
    • Architecture (Also ISA : Instruction set Architecture)
      • ์–ด์…ˆ๋ธ”๋ฆฌ/๊ธฐ๊ณ„์–ด ์ฝ”๋“œ ์ž‘์„ฑ ๋˜๋Š” ์ดํ•ด์— ํ•„์š”ํ•œ ํ”„๋กœ์„ธ์„œ ์„ค๊ณ„ ๋ถ€๋ถ„
      • ์˜ˆ : ๋ช…๋ น์–ด ์ง‘ํ•ฉ ๋ช…์„ธ, ๋ ˆ์ง€์Šคํ„ฐ
    • Microarchitecture : implementation of the architecture
      • ISA๊ฐ€ ํ”„๋กœ์„ธ์Šค ์ƒ์— ๊ตฌํ˜„๋˜๋Š” ๋ฐฉ๋ฒ•
      • ์˜ˆ : ์บ์‰ฌ ํฌ๊ธฐ์™€ ์ฝ”์•„ ์ฃผํŒŒ์ˆ˜
    • ์ฝ”๋“œ ํ˜•ํƒœ
      • ๊ธฐ๊ณ„์ฝ”๋“œ : ํ”„๋กœ์„ธ์„œ๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ๋ฐ”์ดํŠธ ์ˆ˜์ค€ ํ”„๋กœ๊ทธ๋žจ
      • ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ : ๊ธฐ๊ณ„์ฝ”๋“œ์˜ ํ…์ŠคํŠธ ๋ฒ„์ „
    • Example ISAs (intel)
      • ์ธํ…” : x86, IA32, Itanium, x86-64
      • ARM :๊ฑฐ์˜ ๋ชจ๋“  ์ด๋™์ „ํ™”์—์„œ ์‚ฌ์šฉ
  • ์–ด์…ˆ๋ธ”๋ฆฌ/๊ธฐ๊ณ„์ฝ”๋“œ ๊ด€์ 
    • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š ์ƒํƒœ
      • PC Program Counter ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ
        • ๋‹ค์Œ์— ์‹คํ–‰ํ•  ๋ช…๋ น์˜ ์ฃผ์†Œ
        • IEP ๋ผ ์นญํ•จ (IA32) or RIP (x86-64)
      • ์ •์ˆ˜ ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ
        • ๋นˆ๋ฒˆํžˆ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๋ฐ์ดํ„ฐ ์ €์žฅ
      • ์กฐ๊ฑด์ฝ”๋“œ ๋ ˆ์ง€์Šคํ„ฐ
        • ์ตœ๊ทผ์˜ ์‚ฐ์ˆ ์—ฐ์‚ฌ์— ๋Œ€ํ•œ ์ƒํƒœ์ •๋ณด ์ €์žฅ
        • ์กฐ๊ฑด ๋ถ„๊ธฐ๋ฅผ ์œ„ํ•˜์—ฌ ์‚ฌ์šฉ๋จ (์ง„๋ฆฌ๊ฐ’)
      • ๋ฉ”๋ชจ๋ฆฌ
        • Byte๋กœ ์ฃผ์†Œํ™”๋œ ๋ฐฐ์—ด
        • ์ฝ”๋“œ์™€ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ
        • ํ”„๋กœ์‹œ์ €๋ฅผ ์ง€์›ํ•˜๋Š” ์Šคํƒ
  • 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: ๋ฐฐ์—ด, ๊ตฌ์กฐ์ฒด) ํ˜•์‹ ์—†์Œ
      • ๋‹ค๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์—ฐ์†์œผ๋กœ ๋ฐ”์ดํŠธ๋“ค์„ ํ• ๋‹น
  • ์–ด์…ˆ๋ธ”๋ฆฌ ํŠน์„ฑ : ์—ฐ์‚ฐ
    • 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), ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ๋งํ‚น ๋ฐœ์ƒ
  • ๋ชฉ์ ์ฝ”๋“œ์˜ ์—ญ ์–ด์…ˆ๋ธ”
    • Disassembled
    • Disassembler
      • objdump -d temp.o
      • ๋ชฉ์ ์ฝ”๋“œ ์กฐ์‚ฌ์— ์œ ์šฉํ•œ ๋„๊ตฌ
      • ์ผ๋ จ์˜ ๋ช…๋ น๋“ค ๋น„ํŠธ ํŒจํ„ด์„ ๋ถ„์„
      • ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ์™€ ์œ ์‚ฌํ•œ ํ•ด์„ ์‚ฐ์ถœ
      • a.out(complete executable) ์ด๋‚˜ .oํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ
  • ์—ญ์–ด์…ˆ๋ธ”์˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•
    • Within gdb Debugger
    • gdb temp
    • disassemble temp
      • Disassemble procedure
    • x/nxb 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)

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.