Learning Outcomes

This page lists the Learning Outcomes for this course. The focus here is on quizzes, but you’ll have a chance to practice these skills in class and on assignments as well.

The following is the not-yet-complete list of Quiz Learning Outcomes, divided by unit.

Unit 1: Bits and Bytes

Number representations

  • NR 1: binary

    • Proficiency: convert from unsigned binary to decimal
    • Mastery: convert from unsigned binary to hexadecimal
  • NR 2: hexadecimal

    • Proficiency: convert from hexadecimal to binary and decimal
    • Mastery: add/subtract two hexadecimal numbers
  • NR 3: 2’s complement

    • Proficiency: negate a binary value
    • Mastery: convert from decimal to 2’s complement

Data representations

  • DR 1: struct layout

    • Proficiency: understand how a struct is stored in memory (with arrays, no buffer bytes)
    • Mastery: understand how a struct is stored in memory (with buffer bytes and/or unions)
  • DR 2: array layout

    • Proficiency: understand how elements of an array are stored in memory
    • Mastery: understand how complex elements (e.g., structs with nested array(s)) of an array are stored in memory
  • DR 3: UTF-8 encoding (with table provided)

    • Proficiency: encode a codepoint (given byte count)
    • Mastery: encode a codepoint (determine appropriate byte count)
  • DR 4: UTF-8 decoding (with table provided)

    • Proficiency: decode an encoded byte sequence (<= 2 bytes)
    • Mastery: decode a multi-character encoded byte sequence (any byte count)
  • DR 5: char array interpretation

    • Proficiency: understand how bytes are interpreted with %c and %d
    • Mastery: understand how bytes are interpreted with %c, %d, %x, %s, and %p
  • DR 6: integer byte ordering

    • Proficiency: understand how an integer is stored in big- and little-endian
    • Mastery: understand how an array of integers are stored in big- and little-endian
  • DR 7: C strings

    • Proficiency: understand the use of \0 to null-terminate a string
    • Mastery: understand the difference and risks between strcpy and strncpy
  • DR 8: pointers

    • Prociency: understand the difference between a value and its address
    • Mastery: understand how pointers are stored in memory

Operators

  • OP 1: bitwise and logical

    • Proficiency: perform a given bitwise/logical operation
    • Mastery: provide bitwise/logical operation(s) for a given affect (e.g., via masking)
  • OP 2: shift

    • Proficiency: perform a given logical shift operation
    • Mastery: perform a given arithmetic shift operation
  • OP 3: resizing

    • Proficiency: resize an integer value to a smaller size
    • Mastery: resize an integer value to a larger size (signed or unsigned)
  • OP 4: overflow

    • Proficiency: identify when overflow occurs in addition
    • Mastery: identify when overflow occurs in addition/subtraction and perform computation
  • OP 5: addressing and dereferencing

    • Proficiency: identify incorrect use of & and * operators
    • Mastery: correctly use & and * operators
  • OP 6: pointer arithmetic

    • Proficiency: work with addresses of members of a struct or elements in a char array
    • Mastery: work with addresses of complex elements (or their parts) of an array

Unit 2: Instruction Set Architecture / Security

Assembly instructions

  • AI 1: addressing modes

    • Proficiency: interpret operands with constants, registers, and basic memory lookups
    • Mastery: interpret operands with offsets, indexing, and scaling
  • AI 2: move instructions

    • Proficiency: determine type/operands of mov instructions
    • Mastery: interpret mov instructions
  • AI 3: arithmetic instructions

    • Proficiency: interpret arithmetic instruction
    • Mastery: interpret arithmetic instruction with condition codes
  • AI 4: pointer arithmetic

    • Proficiency: interpret instructions using pointer arithmetic
    • Mastery: provide instruction(s) given array/struct statement(s)
  • AI 5: jump instructions

    • Proficiency: determine outcome of cmp jump sequence
    • Mastery: determine outcome of test jump sequence
  • AI 6: stack

    • Proficiency: identify locations on the stack with offsets
    • Mastery: draw stack given push/pop/add/sub instruction(s)

Assembly code

  • AC 1: control patterns

    • Proficiency: distinguish recursion/looping/branching
    • Mastery: distinguish type of loop/branching
  • AC 2: functionality

    • Proficiency: identify parameter count/types and return type
    • Mastery: describe functionality
  • AC 3: reverse engineering

    • Proficiency: reconstruct part of C program from assembly
    • Mastery: reconstruct all of C program from assembly

Security

  • SEC 1: trusting trust

    • Proficiency: provide high-level explanation of trusting-trust attack
    • Mastery: provide deep explanation of trusting-trust attack or defense
  • SEC 2: buffer overflows

    • Proficiency: provide high-level explanation of buffer-overflow attack and defense
    • Mastery: interpret or provide string input to cause a buffer-overflow attack

Unit 3: Networking

  • NW 1: DNS
    • Proficiency: provide high-level explanation of DNS
    • Mastery: provide deep explanation of DNS or an attack against it

Unit 4: Operating Systems

  • OS 1: file systems

    • Proficiency: provide relative path for given file system structure
    • Mastery: provide Unix command(s) with redirection and/or piping
  • OS 2: fork

    • Proficiency: interpret programs with one fork call
    • Mastery: interpret programs with multiple fork calls

Unit 5: Memory Hierarchies

  • MH 1: addresses

    • Proficiency: interpret cache parameters
    • Mastery: interpret address(es)
  • MH 2: cache impact

    • Proficiency: provide high-level explanation of cache benefits
    • Mastery: explanation performance implications of loop ordering