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
- Proficiency: understand how bytes are interpreted with
-
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
andstrncpy
- Proficiency: understand the use of
-
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
- Proficiency: identify incorrect use of
-
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
- Proficiency: work with addresses of members of a struct or elements in a
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
- Proficiency: determine type/operands of
-
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
- Proficiency: determine outcome of
-
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