Skip to content
CYBERSKILLS Academy
Intermediate7h 14m · 24 learning steps · 4 required checkpoints

C & Low-level Programming

Learn what your code actually does to memory — the layer every higher-level language is standing on, and the one attackers work in.

For programmers who can already read simple code in any language and have never had to think about memory, pointers, or what the compiler is doing. No prior C is required — the course teaches the language from the beginning. This course assumes a working Unix-like shell and, from the C course onwards, a C compiler and make. If you do not have those yet — or have never opened a terminal — the Setting Up course installs and verifies all of it first, and nothing here repeats that material.

Course preview

What you will be able to do

  • Explain what happens between your source file and a running program
  • Write C that handles memory deliberately instead of hoping
  • Read and reason about pointers, including the cases that confuse people
  • Recognise the memory bugs behind a large share of real vulnerabilities, and find them with tools
  • Work with bits, integer representation, and floating point without guessing
  • Build a multi-file project and explain what the linker did

Before you join

Course roadmap

English is available for every learning step.

This is the full learning route. Lessons build on earlier work; required checkpoints are the points where the route asks you to demonstrate it.

  1. 01

    Why C is still worth learning

    Lesson · 14 min

  2. 02

    From source file to running program

    Lesson · 16 min

    Builds on: Why C is still worth learning

  3. 03

    Your first C program

    Lesson · 18 min

    Builds on: From source file to running program

  4. 04

    Undefined behaviour: when C stops promising

    Lesson · 16 min

    Builds on: Your first C program

  5. 05

    Types, conversions, and the operators that surprise you

    Lesson · 18 min

    Builds on: Undefined behaviour: when C stops promising

  6. 06

    Control flow and the traps in it

    Lesson · 16 min

    Builds on: Types, conversions, and the operators that surprise you

  7. 07

    Functions, arguments, and lifetimes

    Lesson · 18 min

    Builds on: Control flow and the traps in it

  8. 08

    Arrays and strings: where the bugs live

    Required checkpoint · 20 min

    Builds on: Functions, arguments, and lifetimes

  9. 09

    Structs: grouping data, and what the compiler adds

    Lesson · 18 min

    Builds on: Arrays and strings: where the bugs live

  10. 10

    Pointers: variables that hold addresses

    Lesson · 20 min

    Builds on: Structs: grouping data, and what the compiler adds

  11. 11

    Pointer arithmetic and how arrays really work

    Lesson · 18 min

    Builds on: Pointers: variables that hold addresses

  12. 12

    The stack and the heap

    Lesson · 18 min

    Builds on: Pointer arithmetic and how arrays really work

  13. 13

    Allocating and releasing memory

    Required checkpoint · 22 min

    Builds on: The stack and the heap

  14. 14

    Function pointers: passing behaviour around

    Lesson · 18 min

    Builds on: Allocating and releasing memory

  15. 15

    Reading the symptoms: which memory bug is this?

    Lesson · 18 min

    Builds on: Function pointers: passing behaviour around

  16. 16

    The tools that find memory bugs for you

    Lesson · 18 min

    Builds on: Reading the symptoms: which memory bug is this?

  17. 17

    Writing C that resists mistakes

    Required checkpoint · 20 min

    Builds on: The tools that find memory bugs for you

  18. 18

    How integers are stored, and where they break

    Lesson · 18 min

    Builds on: Writing C that resists mistakes

  19. 19

    Working with individual bits

    Lesson · 18 min

    Builds on: How integers are stored, and where they break

  20. 20

    Byte order and data that crosses a boundary

    Lesson · 18 min

    Builds on: How integers are stored, and where they break

  21. 21

    Floating point: why 0.1 + 0.2 is not 0.3

    Lesson · 18 min

    Builds on: How integers are stored, and where they break

  22. 22

    Multiple files, headers, and what the linker does

    Lesson · 18 min

    Builds on: Floating point: why 0.1 + 0.2 is not 0.3

  23. 23

    Libraries, and building a project repeatably

    Lesson · 18 min

    Builds on: Multiple files, headers, and what the linker does

  24. 24

    Reading real C, and where to go next

    Required checkpoint · 20 min

    Builds on: Libraries, and building a project repeatably

Learn with an account when access opens

Your CYBERSKILLS account will keep progress and checkpoint results together. Until then, this syllabus is here to help you choose the route that fits your goal.

Browse course previews