Exam Structure

As discussed in the syllabus, the exams in this class are meant to assess your proficiency on a specific set of learning objectives. Each exam will have a posted set of learning objectives that you can demonstrate your understanding of for that quiz, and all core learning objectives will appear on at least 2 exams.

Exam Learning Objectives

The learning objectives that will be on exams are:

Number representations

Core

  • NR1: Converting from unsigned binary to decimal
  • NR2: Negating a binary value with 2’s complement

Advanced

  • NR3-AD: Adding/Subtracting two hexadecimal numbers

Data representations

Core

  • DR1: Demonstrate how a struct is stored in memory with arrays (no buffer bytes)
  • DR2: Encode a codepoint (given the byte count) (with table provided)
  • DR3: Explain how bytes are interpreted with %c and %d
  • DR4: Demonstrate how an integer is stored in big- and little-endian
  • DR5: Demonstrate the use of \0 to null-terminate a string
  • DR6: Demonstrate the difference between a value and its address

Advanced

  • DR7-AD: Demonstrate how complex elements (e.g. structs with nested arrays) of an array are stored in memory
  • DR8-AD: Decode a multi-character encoded byte seqeuence (any byte count) (with table provided)

Operators

Core

  • OP1: Perform a given bitwise/logical operation
  • OP2: Perform a given logical shift operation
  • OP3: Identify when overflow will occur in addition
  • OP4: Use addresses of members of a struct or elements in a char array correctly

Advanced

  • OP5-AD: Provide bitwise/logical operations for a given affect (e.g. via masking)
  • OP6-AD: Resize an integer value to a larger size (signed or unsigned)
  • OP7-AD: Demonstrate the correct use of & and * operators

Assembly Instructions

Core

  • AI1: Interpret operands with constants, registers, and basic memory lookups
  • AI2: Interpret a basic arithmetic instruction
  • AI3: Interpret instructions using pointer arithmetic
  • AI4: Determine the outcome of a cmp jump sequence

Advanced

  • AI5-AD: Interpret operands with offsets, indexing, and scaling
  • AI6-AD: Interpret mov instructions
  • AI7-AD: Draw the stack given push/pop/add/sub instruction(s)

Assembly code

Core

  • AC1: Distinguish between recursion/looping/branching
  • AC2: Identify parameter count/types and return type of given a given assembly program

Advanced

  • AC3-AD: Describe the functionality of a given assembly program
  • AC4-AD: Reconstruct all of a C program from given assembly

Security

Core

  • SEC1: Provide a high-level explanation of the trusting-trust attack
  • SEC2: Provide a high-level explanation of buffer-overflow attack and defense

Networking

Advanced

  • NW1-AD: Provide a high-level explanation of DNS

Operating Systems

Core

  • OS1: Provide a relative path for a given file system structure

Advanced

  • OS2-AD: Interpret programs with multiple fork calls

Memory Hierarchies

Core

  • MH1: Interpret given cache parameters

Advanced

  • MH2-AD: Explain the performance implications of loop ordering

You can see how you are doing on each of these on Moodle under the “Grades” tab.