Readings "Passive" learning opportunities

This page collects together all of the “readings” associated with individual modules.

In this site, readings represent “passive” learning opportunities, as opposed to experiences, which represent “active” learning opportunities. In many courses, readings and experiences together constitute the “assignments”.

Module: Getting Started

Guided tour of Morea course websites

About Morea

Syllabus

Detailed syllabus for this course

Getting Started

Course objectives, logistics, administrivia

The Linux command-line

A set of pointers to material about the Linux command-line

Module: Integers & Computers

Background/Review on Integers and Bases

Bases, decimal, binary, hexadecimal, conversions, arithmetic

Screencast: Background/Review on Integers and Bases

Representation of Integers

2’s complement

Screencast: Representation of Integers

Integers and their Representation (In-class practice)

2’s complement

Module: Computer Architecture

History

Quick history of computers

Architecture

Computer archicture, assembly, assembler, compiler

Module: X86 & NASM

NASM Manual

X86

x86 history, basics, and registers

Introduction to NASM's data and bss segments

Initializing bytes in NASM

Screencast: Introduction to NASM's data and bss segments (PART 1)

Screencast: Introduction to NASM's data and bss segments (PART 2)

NASM's data and bss segments practice and some instructions

Data segment practice and first assembly instructions

Module: First NASM Program

NASM first program

PCASM, Sections 1.3.6-1.3.7, 1.4, 1.5

Sample source code

NASM how to

A quick guide to using NASM in this course via an example

Module: Data Size & Arithmetic

Modifying Data Sizes (Casting)

Understanding casting in high-level language / data sizes in assembly

Arithmetic

Performing arithmetic operations in assembly

Sample source code

Module: Control Structures

Jumps and Branches

Using jump and branch instructions in assembly (PCASM Section 2.2)

Control Structures

Implementing high-level control structures in assembly (PCASM Section 2.3)

Sample source code

Disassembling code with NASM

Module: Bit Operations

Bit Shifts

Using shift instructions in assembly (PCASM Section 2.1)

Bitmasks

Using bitmasks with bit operations (PCASM Sections 3.2, 3.3, 3.4)

Sample source code

Module: Midterm

Midterm Review

Module: Subprograms

Subprograms 101

Introduction to subprograms in assembly (PCASM Sections 4.1, 4.2, 4.3, 4.4)

Subprogram Arguments

Implementing programs that take arguments in assembly (PCASM Sections 4.5.1)

Subprogram Local Variables

Implementing subprograms with local variables in assembly (PCASM Sections 4.5.2)

Sample source code

Buffer Overflow

The buffer overflow code vulnerability due to stack corruption

Module: Compiling

Compiler Overview

The big picture of what a compiler is and does

Lexing

How a compiler (can) perform lexical analysis

Installing ANTLR

A guide to installing and testing ANTLR

A Simple ANTLR lexer

A example of using ANTLR to implement a simple parser

Parsing

A description of how a compiler (can) perform syntactic analysis

A simple ANTLR parser

A example of using ANTLR to implement a simple parse

Code Generation

How compilers (can) generate code

A simple ANTLR compiler

A example of using ANTLR to implement a simple compiler

Code Optimization

How compilers (can) optimize code

The Amazing Compiler Explorer

Watch live how a compiler compiles your code