################################################################### ###################### ############################# ### GDB COMMANDS ### ###################### ############################# ################################################################### QEMU CONFIGURATION qemu must be started with "-s" option (shorthand for "-gdb tcp::1234") # # GDB PART # SYMBOL FILES add-symbol-file /path/to/Hello.debug 0x... -s .data 0x... CONNECTION - source gdbscript (if a gdbscript is created, which contains add-symbol-file commandos) - target remote localhost:1234 DISCONNECTION - detach break connection with target, target resumes execution GDB Target (RSP Client) (RSP Server) D O------------------------------>O O RSP exchange O<------------------------------O OK -disconnect Simply break connection. Target stays at the point where execution terminated previously Reconnection(target remote): resume debugging at the point where the previous connection was broken BREAKPOINTS - b CoreHandleProtocol || or OutputString - break *0x65fe447 || set breakpoint at address - delete 2 || delete breakpoint no 2 - break sampleApp.c:nn=LineNumber INFORMATION - info address SYM || Get address for symbol SYM symbol ADDR || Show symbol at specified address all-registers || all registers & their contents breakpoints files || get Entry point + sections files || Names of targets & files being debugged functions || all function names in Program functions UefiMain || show where this function occurs line types [regex] || list all types or with regex args || Argument variables of current stack frame locals || local variables of current stack frame variables || all gloabl & static variables CONTROL FLOW - c || continue - next || move only one step forward - bt || print back_trace of all stack frames - stop || stop program until it reaches a different source line FILES (perhaps not applicable when debugging with QEMU) - file MemtestEfi.efi || load file ...no debugging symbols found...done - file || unload files LIST - list || list specified function or line gdb --tui - layout asm - layout reg - layout src - tui enable - tui disable - next - ctrl+x o || change active window - ctrl+x 1 || use TUI layout with one window - ctrl+x 2 || use TUI layout with two windows - PgUp || scroll the active window one page up - PgDn || scroll the active window one page down - Up || scroll the active window one line up - Down || scroll the active window one lin down - Right - Left - C+L || refresh the screen VARIABLES info locals info variables info args || Set is the same as print except that the expression's value is not printed || and is not put in the value history. || if your program has a variable width, you get an error if you try to set || a new value with just ‘set width=13’, because GDB has the command set width || To avoid to set silently general variables to invalid values, ALWAYS use || set var x=4 print x=4 set x=4 or set variable x=4 whatis x -> type = double DISSASEMBLE BINARIES gdb -batch -ex 'file /bin/ls' -ex 'disassemble main' Also, -ex 'set disassembly-flavor intel' before other -exs will result in Intel assembly syntax gcc -O0 -ggdb3 -std=c99 -Wall -Wextra -pedantic -o main.out main.c gdb -batch -ex "disassemble/rs myfunc" main.out