1. Goals for this week
-
Reminder of tools for examining binary files (gdb and ddd in particular)
-
Learn about man pages, and using man and apropos
2. Starting Point Code
There is no starting point code this week. Instead, let’s revisit
what we worked on last week and review some IA32 debugging resources
using the mystery
program.
Start by cd’ing into your week06
subdirectory:
$ cd ~/cs31/weeklylab/week06
$ ls
Makefile mystery* README simplefuncs.c
3. Review of gdb and ddd for IA32 binaries
Let’s try out the mystery
program from last week and in ddd
again:
-
let’s run it and see what it does
-
next, lets run it in ddd and examine its code:
$ ddd ./mystery (gdb) break main (gdb) run (gdb) disas main
-
what does main control flow look like?
-
let’s add some break points around function calls and in functions
-
let’s examine some state around functions
-
we can print out values on the stack using x and a stack memory address
(gdb) x/a address # /a: "examine memory contents as an address" (gdb) x/s address # /s: "examine memory contents as a string" (gdb) x/wd address # /wd: "examine memory contents as a 32-bit decimal"
4. man and manpages
First, we are going to learn how to use man to read manual pages, and how to use apropos to find commands: man and apropos
Next, let’s look at the man page for strcmp and for scanf to see what they are telling us about these functions.
$ man scanf
$ man 3 scanf # or explicitly specify the manual section:
# (C library function scanf is in section 3 of the manual)
$ man strcmp
apropos
is a command for finding the names of other commands or library
functions. It is useful if you cannot remember the name of a library
function or command but you know what it does. Suppose that we cannot
remember strcmp
, we could try to find it using apropos:
$ apropos compare
5. Handy References
-
gdb for IA32 assembly debugging IA32 gdb debugging guide
-
GDB for Assembly (from the gdb Guide). (assembly debugging and x command)
-
Section 3.2 and Section 3.5 of textbook (assembly debugging, print, display, info and x commands)
-
Tools for examining phases of compiling and running C programs