# Debuggers

## GDB

#### Load file into gdb

start gdb with the file

```
gdb <FILE NAME>
```

or load it within gdb

```
file <FILE NAME>
```

#### Quit

**q**. As simple as that.

### Info

**i** is an abbreviation for **info**.

#### List functions

```
i functions
```

#### List breakpoints

```
i b
```

#### List registers

```
i registers
```

#### Info about stack frame

```
i frame
```

### Breakpoints

**b** is an abbreviation for **break**.

#### Break by address

```
b *<ADDRESS>
```

instead of the address, a symbol can be used \[like functions name].&#x20;

#### Break by line number

```
b <FILE NAME>:<LINENUM>
```

if filename is not specified the current one is used.

#### Break by offset

```
b <+/-><OFFSET>
```

### Execution flow

#### Running

* Use **r** to run the binary.
* Use **c** to continue the execution.
* Use **finish** to continue until the current stack frame returns.

#### Stepping

* Use **s** \[abbreviation of step] to execute a line of source code.
* Use **si** \[abbreviation of stepi] to step into the next machine instruction.
* Use **ni** \[abbreviation of nexti] to step into the next machine instruction \[step over function calls].

### Examine Memory

**x** is an abbreviation for **examine**.

the command structure is **x/nfu \<ADDRESS>**:

* **n** - Integer indicating how much memory to examine.
* **f** - Display format
* **u** - unit size&#x20;

**Example 1** - Examine 32 words in hexadecimal form, starting at EIP's value

```
x/32xw $eip
```

**Example 2** - Examine the first 5 instructions of the function "func"

```
x/5i *func
```

#### Disassemble

disassemble a function, range, length and more.

```
disas *main
```

To save yourself the complication of AT\&T assembly, change it to Intel with:

```
set disassembly-flavor intel
```

### Set

Chage register value with **set**:

```
set $<REGISTER> = <VALUE>
```

## WinDbg

#### Set breakpoint

```
bp <ADDRESS>
```

#### Execution flow

```
p [COUNT] # Step over (or F10)
t [COUNT] # Step into (or F8)
g # Go
```

#### Examine memory

```
d <START_ADDRESS> [END_ADDRESS]
```
