ubuntu下将一个hello.c文件经过预编译(.i)、编译(.s)、汇编(.o)、链接到可执行文件hello.out的过程的命令行为:
gcc -E hello.c -o hello.i
gcc -S hello.i -o hello.s
gcc -c hello.s -o hello.o
gcc hello.o -o hello.out
运行:./hello.out
gdb : gdb hello.out 或 gdb -q(安静模式) hello.out
添加断点 : b 3(行号) 或b main(函数名) b 标号(_start+1)
查看所有断点信息: info reg breakpoints
删除断点 : delete breakpoint Num(Num为断点的序号,不是断点所在行号)
运行程序 :r(run)
下一步 :n(next) 或 s(step),执行到某个函数方法时,step可以跳进函数里面,next会直接跳过
退出当前循环 :finish
display : 设置程序中断后欲显示的数据和格式
常用的: : display /i $pc
($pc代表当前汇编指令,/i代表16进制,这条语句执行了,每次程序中断的时候都能看到即将执行的汇编指令)
如display /d $eip:每次程序中断的时候都会以10进制打印出eip的值
undisplay <编号>: 取消前面的display设置,以后每次程序中断就不会显示使用display命令要求显示的值了
查看所有的寄存器: info reg
查看某个寄存器 : info reg eax(寄存器名),也可用print /d $eax(数据格式,d是十进制,$eax(寄存器))
查看标志寄存器 : print $eflags
查看变量a的值 : print a
查看变量a的地址 : print &a
查看内存 : x/5bt,查看5个字节(b),以二进制形式显示(t),x/5bx,x代表(16进制)显示,b也可换成w(4字节)或h(2字节)
另 : 计算机的内存是有尊严的,不是啥都让你随便访问
查看帮助 : help 如查看有关breakpoint的命令 help breakpoint
补全命令提示 : 连按2下Tab
查看汇编窗口 : layout asm
源代码和汇编窗口同时显示: layout split
退出窗口,回到传统模式下:Ctrl+x,再按a
查看源代码 :list
查看源代码n到m行:list n,m
设置list默认显示的m行:set listsize m
传统模式下: 显示当前目录下文件: ls 删除某个文件 : rm demo.c(删除demo.c文件)