1. Goals for this week

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

  2. Learn about manual 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 assembly debugging resources using the mystery program.

Start by sshing to an ARM machine and switching into your week06 subdirectory:

$ ssh arm.cs.swarthmore.edu
...
$ cd ~/cs31/weeklylab/week06
$ ls
Makefile  mystery*  README  simplefuncs.c

3. Review of gdb assembly

Let’s try out the mystery program from last week and in gdb again:

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

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

    $ gdb ./mystery
    (gdb) layout asm
    (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