1. Goals for this week

  1. Reminder of tools for examining binary files (gdb and ddd in particular)

  2. 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:

  1. let’s run it and see what it does

  2. next, lets run it in ddd and examine its code:

    $ ddd ./mystery
    (gdb) break main
    (gdb) run
    (gdb) disas main
  3. what does main control flow look like?

  4. let’s add some break points around function calls and in functions

  5. let’s examine some state around functions

  6. 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