Debugger. Reverse engineering.
See example from NorthSec 2020 – CTF-101 Workshop
Plugin gef.
Usage
Debug program
gdb <program name>
Set program arguments
Setting arguments after the program is started will not take effect until the program is restarted.
set args value1 value2 value3 ...
set args 'Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2A'
Run the program
run
When the program crashes, find who called the method that crashed. Shows the stack?
backtrace
Examine a specific address (example below)
x <address>
x 0xffbef014
Breakpoints
break <function name>
run
break main
run
Execute one line at a time
step
To execute step again, press Enter. Enter executes the last command.
The debugger steps into functions that are called. If you do not want this behavior, use “next” instead of “step”.
Print address of system()
print system
$1 = {<text variable, no debug info>} 0xf7e0d000 <system>
Show register values
Value for one register (eip):
info registers eip
eip 0x62413762 0x62413762
All registers:
info registers
eax 0x64 100
ecx 0x0 0
edx 0x0 0
ebx 0xffffd140 -11968
esp 0xffffd110 0xffffd110
ebp 0x41366241 0x41366241
esi 0xf7fad000 -134557696
edi 0xf7fad000 -134557696
eip 0x62413762 0x62413762
eflags 0x10282 [ SF IF RF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x0 0
gs 0x63 99
Disassemble function
disass <function>
disass main
Exit gdb
quit