CS 240 Lab 8

Learning Goals & Reflection

CS 240 Lab 8

Learning Goals

Core Goals

Students can:

  1. Use gcc to compile code. ( )
    1. Look up the meaning of gcc flags.
    2. Use gcc to compile C code into assembly code.
    3. Use gcc to compile C code into an executable binary.
    4. Explain how the -Wall, -std=c99, -S, and -o flags for gcc change its behavior.
  2. Use objdump and/or gdb to disassemble an executable file. ( )
    1. Explain how to use objdump on a binary file.
    2. Explain what the three columns of output from objdump are.
    3. Explain how to use the disas command in gdb to disassemble a function.
    4. Explain What the + numbers in the disas output mean.
  3. Identify and explain core x86 assembly instructions. ( )
    1. Look up the reference for an unfamiliar assembly instruction and understand what it is saying.
    2. Explain what the mov family of instructions does.
    3. Explain what the j* family of instructions does.
    4. Explain what the cmp/test family of instructions does.
  4. Explain the relationship between assembly code and C code. ( )
    1. Identify function calls in assembly code.
    2. Explain how comparison instructions link with conditional jump instructions in assembly code.
    3. Identify how many parameters a function uses by looking at its assembly code, for functions with up to 6 parameters.
    4. Identify which line(s) of code in an assembly program set return value(s) for a function.
    5. Identify conditionals and loops within assembly code.
    6. Identify which registers are used as pointers in assembly code.
  5. Explain the usage of key x86 registers. ( )
    1. Explain what the %rax register is used for in x86 assembly code.
    2. Explain what the %rdi, %rsi, %rdx, %rcx, %r8, and %r9 registers are used for when calling functions in x86 assembly code.
  6. Reverse engineer an executable file to figure out what the code is doing. ( )
    1. Given a binary file, disassemble it to read the assembly instructions.
    2. Given assembly code for a function which compares input against a specific string, use gdb to figure out what that string is, and provide input to manipulate the comparison.

Stretch goals

  1. Identify and explain core x86 assembly instructions. ( )
    1. Explain what the lea instruction does.
    2. Explain what the push and pop instructions do.
  2. Explain the relationship between assembly code and C code. ( )
    1. Explain how the lea instruction is used in relation to the & operator and also explain its use for general arithmetic.
  3. Explain the usage of key x86 registers. ( )
    1. Explain what the %rsp register is used for in x86 assembly code.
  4. Reverse engineer an executable file to figure out what the code is doing. ( )
    1. Given assembly code that uses a loop to check relationships among a sequence of numbers, figure out exactly what the loop checks for, and provide a sequence of numbers that will pass the checks.

Extra goals

  1. Explain the usage of key x86 registers. ( )
    1. Explain what the %rbp register is used for in x86 assembly code.

Reflection

Note: Make sure to use the ‘print’ dialog to save this page as a PDF when you’re done.

I’m most confident in (list a few):

I’m least confident in (list a few):

Questions (please take the time to ask at least one, thinking of a question will help you cement what you’ve learned):