Expectations for CMSC414
The following is material we expect you to know
beforehand. Make sure you review these topics as needed before the
semester begins.
C (this is used heavily)
- How to write a program
- Memory model (heap, stack, malloc, free, etc.)
- Arrays, pointers, pointer arithmetic
- Command-line arguments (argc, argv)
- functions and structures
- #include
- Storing ASCII strings in C
- Representation in memory (null-terminator)
- String creation and manipulation
- Basic string functions (strlen, strcmp, etc.)
- Storing binary data in C
- Representation in memory (the need for both a char*/void* and
a separate length variable)
- Creating and manipulating data
- Basic data functions (memcmp, memcpy)
- Difference with strings (why strlen() doesn't apply here)
- How to compile from the command line (including using make)
- How to run a program from the command line
gdb
- How to run a program in gdb
- Setting breakpoints
- Inspecting variables, memory addresses
x86 assembly
- Registers
- Basic operations (eg. add, sub, mul, xor, jmp, jne, ret, push,
nop)
Posix shell (eg. bash)
- Viewing directories and files
- Changing directories
- Copying, moving, and renaming files
- Running commands
numbers
- binary, octal, decimal, and hexadecimal
- converting between representations
- difference between representations and in-memory storage
- byte ordering
- powers of 2 up to at least 10
- standard prefixes in powers of 2 and 10
- bits per hex digit, byte, int32, int64, address
- modular arithmetic
- bit operations (and, or, xor, not)