The goal of this assignment is to become familiar with the setup that will be used for future
assignments, such as the use of a virtual machine, as well as the
basics of working with gdb and writing programs in x86 assembly.
To complete this assignment, you will be provided with a VirtualBox VM pre-populated with the
assignment files.
In order to match the environment in which your submission will be graded, all work for this
assignment must be done on the VirtualBox VM we provide, named pa1box
. You can download the VM
image here.
The VM is configured with two users: student
, with password hacktheplanet
; and root
, with
password hackallthethings
. The VM is configured with SSH on port 2222. Please note that SSH is
disabled for root
, so you can only SSH in as the student
user. You can still log in as root
using su
or by logging into the VM directly.
To SSH into the VM:
ssh -p 2222 student@127.0.0.1
To copy files from your computer to the VM:
scp -P 2222 -r /path/to/files/ student@127.0.0.1:/home/student
To copy files from the VM to your computer:
scp -P 2222 student@127.0.0.1:/path/to/files/ /destination/path
Files for this sub-assignment are located in the gdb
subdirectory of the student
user's home
directory in the VM image; that is, /home/student/gdb
. SSH into the VM and cd
into that
directory to begin working on it.
Inside the gdb
directory, you'll find fib.c
, a C program demonstrating the Fibonacci sequence;
a Makefile
; and hw1.txt
, in which you'll record your responses to the questions below. The
first step is to compile fib
by running make
on the command line.
To run the fib
executable in GDB, run gdb fib
.
I recommend the following workflow in GDB:
Starting. Set breakpoints that you can later use for analysis:
b foo
— break at function foo
b *0x08048489
— break at the instruction at address 0x08048489r
— run the executableAnalyzing. Examine memory, registers, etc; disassemble code; show stack frames, backtrace,
etc; and more:
disas foo
— disassemble function foo
i r
— view registerswhere
— view stack framesx <loc>
— examine memoryx $eip
— examine current instruction pointerx /10x $esp
— examine 10 words at top of stackx /10x buf
— examine 10 words in buf
x /10i $eip
— examine 10 instructions starting at instruction pointerx /10i foo
— examine 10 instructions starting at foo
Continuing. Continue analysis:
c
— continue execution until next breakpoint/watchpointsi
— step to the next instructions
— step to the next line of source codeNote that this is only a cursory overview of GDB; much more info is available from online
resources.
Play with gdb fib
to complete the following exercises.
ecx
register when the function f
is called? (4 pts)i
in the main function before entering the for loop body? (4 pts)f
? (4 pts)f
? (4 pts)f
completes after being called from main
, to which address in main
does controlFill your answers to the above questions on Gradescope assignment PA1
. Strictly follow the format of sample answers given there.