Principy počítačů – Základy

Tato kapitola shrnuje základní principy fungování počítače. Cílem je vytvořit dostatečný kontext pro pochopení dalších témat (reversing, exploitation, assembly apod.).

Architektura CPU

Procesor je hlavní výpočetní jednotka počítače. Skládá se z několika základních částí:

ALU (Arithmetic Logic Unit)

ALU provádí:

  • aritmetické operace (sčítání, odčítání)
  • logické operace (AND, OR, XOR)

CU (Control Unit)

Řídicí jednotka:

  • načítá instrukce z paměti
  • dekóduje je
  • řídí jejich vykonávání

Registry

Malé, velmi rychlé paměti uvnitř CPU:

  • obsahují aktuální data
  • drží adresy a mezivýsledky

Paměť (RAM vs ROM)

RAM (Random Access Memory)

  • volatilní (po vypnutí se smaže)
  • ukládá běžící programy a data

ROM (Read Only Memory)

  • nevolatilní
  • obsahuje firmware (např. BIOS)

Schéma počítače

Von Neumann architektura

  • program i data ve stejné paměti
  • jednodušší návrh
  • může docházet ke „bottlenecku“ (jedna sběrnice)

Harvard architektura

  • oddělená paměť pro instrukce a data
  • umožňuje paralelní přístup
  • používá se např. v embedded systémech

Dvojková soustava

Počítače pracují v binární (dvojkové) soustavě:

\[ 1010_2 = 10_{10} \]

Každý bit má hodnotu:

\[ 2^0, 2^1, 2^2, ... \]

Šestnáctková soustava

Hexadecimální (základ 16) se používá pro přehlednější zápis:

\[ 0xFF = 255 \]

Převod:

\[ 1111_2 = F_{16} \]

Znaménková vs bezznaménková čísla

Bezznaménková (unsigned)

\[ 0 \text{ až } 2^n - 1 \]

Znaménková (signed, two's complement)

Nejvyšší bit určuje znaménko.

Např. pro 8 bitů:

\[ 11111111 = -1 \]

Floating point (okrajově)

Reálná čísla jsou reprezentována pomocí IEEE 754:

\[ \text{value} = (-1)^s \cdot 1.m \cdot 2^e \]

Používá se:

  • mantisa (m)
  • exponent (e)
  • znaménko (s)

Pro reversing/exploitation není většinou klíčové, ale je dobré vědět, že reprezentace není přesná.

Program a instrukce

Program

Program je posloupnost instrukcí, které CPU vykonává.

Instrukce

Instrukce je základní operace, například:

  • načti data
  • přičti
  • skoč (jump)

Na nízké úrovni jsou instrukce reprezentovány jako binární kód.

Programovací jazyky

Vysokoúrovňové jazyky

Např.:

  • C
  • Python
  • Rust
  • Zig

Abstrakce nad hardwarem.

Nízkourovňové jazyky

  • assembly

Blízko hardware, přímá práce s registry a pamětí.

Shrnutí

  • CPU vykonává instrukce pomocí ALU a CU
  • data jsou uložena v paměti (RAM)
  • programy jsou posloupnosti instrukcí
  • počítače pracují s binárními daty
  • hex je pouze čitelnější reprezentace

Tyto základy jsou nutné pro pochopení toho, jak programy fungují na nízké úrovni.