linux下 gcc gdb objdump nm readelf常用命令:持续编辑中

【gcc】:
    1、编译四步骤:
          预处理:gcc -E test.c -o test.i
          编译:   gcc -S test.i -o test.s
          汇编:   gcc -c test.s -o test.o
          连接:   gcc test.o -o test.out
    2、指定输出文件名称:gcc test.c -o test.out
    3、显示编译时的详细信息、编译器的版本、编译过程等  gcc -v
    4、加入gdb调试信息 gcc -g
    5、打开所有警告信息 gcc -Wall
    6、使用优化选项 gcc -Ox 【x为0 1 2 3,0为不优化,等效于不加-O0】
    7、增加备选头文件目录 gcc -l /home/xxx/xxx
    8、增加首选库文件目录 gcc -L /home/xxx/xxx
    9、生成静态连接库文件 gcc -static
【gdb】:
    1、装载调试文件【两种方式】,但没开始运行
       a> gdb test.out
       b> gdb
          file test.out
    2、从main重新开始执行程序【=右边是命令的缩写】,系统自动在main{处设置临时断点
       start =st
    3、开始调试程序,全速执行,一路执行到完(与start比较)。可选参数,表示 > < >>输入输出参数等
       run =r
    4、信号/断点 使暂停后,继续执行直到遇到断点,否则执行到完。可选参数N,表示忽略几次断点
       continue [N]
    5、单步执行,可跟参数N,表示执行几步
       step [N]
    6、break =b
       a> 增加断点 break [bp-spec],增加断点后,默认使能
       b> 查看当前断点信息 info breakpoints/info break/info breakpoint/i b
       c> 断点生效 enable num
       d> 断点失效 disable num
       e> 删除断点 delete num
       f> 使断点bp_num被忽略Count次 ignore bp_num Count
    7、添加调试暂停后待现实更新的变量
       a> 增加自动显示表达式&变量 display EXP
       b> 删除自动显示表达式&变量编号num,无参数num则表示删除全部 undisplay [num]
    8、打印表达式&变量的值 print =p
       a> 查看局部变量【例如,全局变量与局部变量同名时】  print function::variable or print 'function'::variable
       b> 查看局部变量【例如,不同文件中同名时】 print 'file'::function::variable
       c> 查看全局变量【例如,不同文件中同名时】 print 'file'::variable
       d> 查看动态数组【array为数组首地址,len为数据个数(不是字节长)】 p *array@len
       e> 查看静态数组【array为数组名】 p array
       f> 输出格式【例如,变量i】
          x 按十六进制格式显示 p/x i
          d 按十进制格式显示 p/d i
          u 按十六进制无符号格式显示 p/u i
          o 按八进制格式显示 p/o i
          t 按二进制格式显示 p/t i
          a 按十六进制格式显示 p/a i
          c 按字符格式显示 p/c i
          f 按浮点格式显示 p/f i
    9、观察点设置,为某一表达式设置观察点,当程序执行过程中,表达式的值发生变化时,则gdb会中断执行
       a> 当变量的值发生变化时,中断程序的执行 watch EXP
       b> 当地址处的值发生变化时,中断程序的执行 watch -location(=-l) EXP
       c> 当值被读取时,中断程序的执行 rwatch a
    10、中断程序的执行 kill
    11、选择并打印某一栈帧,NUM可选
        a> frame [NUM]
    12、退出调试
        quit
    13、backtrace
    14、改变变量的值 set
    15、info
       a> info address
       b> info registers
       c> info all-registers
       d> info args
       e> info auto-load
       f> info breakpoints/b
       g> info files
       h> info frame
       i> info functions
       j> info locals
       k> info mem
       l> info program
       m> info set
       o> info sharedlibrary
       p> info source
       q> info sources
       r> info stack
       s> info target
       t> info variables
       u> info win
    16、执行下一语句,但不进入(相对于step) next =n
    17、显示文件源码 list =l
       a> 显示当前文件N行前后 l N
       b> 显示文件【file】的行【N】前后 l file.c:N
       c> 显示文件函数【function】前后 l function
       d> 显示文件【file】的函数【function】 l file.c:function
    18、装载/载入 文件 file
    19、文件窗口的打开关闭及切换:src register assemble cmd
       a> 显示源码窗 layout src
       b> 显示汇编窗 layout asm
       c> 显示分割窗【源码窗在上、汇编窗居中、命令窗在下】 layout split
       d> 显示寄存器窗【在源码/汇编窗之上】
       e> 显示通用寄存器窗 tui reg general
       f> 显示系统寄存器窗 tui reg system
       g> 显示多寄存器页的下一页 tui reg next
       h> 显示当前所有窗体及focus窗体 info win
       i> 在info win显示的所有窗体中,从上到下,依次切换当前窗体 fs next
       j> 切换到命令窗 fs CMD/cmd
       k> 切换到代码窗 fs SRC/src
    20、显示变量类型有两个命令 whatis or ptype
【objdump】:
【nm】:
【readelf】:

posted @ 2018-11-26 10:32  thinking......  阅读(636)  评论(0)    收藏  举报