Udemy
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
Turn what you know into an opportunity and reach millions around the world.
Learn More
Your cart is empty.
Keep shopping
Computer Organization and Assembly Language
Highest Rated
Rating: 4.9 out of 5(13 ratings)
225 students

Computer Organization and Assembly Language

Learn assembly language and its role in turning your code into a safe, optimized running application
Last updated 4/2025
English

What you'll learn

  • Write and understand x86 32bits assembly languge (Core Intel 80386 Instruction Set) and more
  • Understand at the most fundamental level mechanisms of higher level languages (pointers, variables, memory allocation, function calls, instructions)
  • Understand the build process behind GCC compiler - preprocessing, compilation, assembly, linking
  • Manually generate executables from projects containing source files, object files and libraries
  • Understand what happens at runtime (when application is launched into execution) - loader, shared libraries, process address space
  • Understand how hardware resources are used by a running process - CPU, registers, RAM, cache
  • Master debugging a program using extensions of GDB debugger
  • Reverse-engineer a binary using both static and dynamic analysis tools (objdump, Ghidra, GDB peda)
  • Exploit or protect against some of the most popular code vulnerabilities: buffer overflow
  • Understand and use mechanisms of protection against exploits (ASLR, Stack Smashing Protection, Data Execution Prevention)
  • Learn how to build C, C++ and assembly source files in the same executable and what's the interaction between them
  • Understand what "inline" and inline assembly are

Course content

12 sections20 lectures6h 1m total length
  • Introduction2:42
  • Setting Up Your Environment12:29

    For those of you that do not have a Linux operating system or the proper architecture, we go through all the steps of Virtual Machine installation and emulator installation, respectively. Also, we set up the system such that you will have all the tools that will be necessary during the time you will be taking this course (and after ;)

Requirements

  • Computer (x86_64 architecture recommended)
  • Basic C programming knowledge would be helpful, but not mandatory
  • Being accustomed with the Linux operating system would be helpful, but I will walk you through everything you need - virtual machine, terminal, VSCode

Description

This course presents in a simple manner the assembly language - intel syntax - for the x86 32-bits architecture and places this in the context of a computing system.  We start with a short presentation of the hardware components on which assembly code is highly reliant, how they work and what is their purpose in relation to the software. We continue with some higher level notions - data, variables, pointers, functions - as we understand them in languages such as C/C++ and we show all the steps that lead to the assembly language. By using a lot of demos and animations, we go through all the assembly language notions - registers, static memory, the stack, function calling, instructions - side by side with the more familiar concepts in higher level languages. In this process, we make use of multiple tools, both for static and dynamic analysis of binaries: GDB, objdump, nm. Towards the end, we touch on the security side of assembly. We do a deep dive into one of the most common vulnerabilities, buffer overflow and show how programs can be exploited. While on this topic, we present a binary analysis tool that is the bleeding edge in the domain of security: Ghidra.


This course is for people of any level and is the direct result of a desire to explain the concepts that were most useful to my career path in the simplest manner.

Who this course is for:

  • Absolute beginners in programming that want to understand how the whole system works - from a piece of code to bits on the CPU - and how higher-level languages manage to do it all
  • Anyone interested in security and wants an introduction into reverse-engineering, exploits and protection mechanisms
  • Anyone with a special interest towards low-level programming - operating systems, embedded systems, drivers
  • Programmers at any level who just want a deeper understanding of the underlying mechanisms of the language they are using