gdb 自定义脚本命令语法简单介绍

1. # 为脚本注释命令
2. 赋值语句:set,

set 命令很强大,

a.它可以是设置gdb 的选项, 例如:

set confirm off
set verbose off
set history filename ~/.gdb_history
set history save
set output-radix 0x10
set input-radix 0x10

set 选项可以用show 命令来查看设置效果

b. set 可以自定义变量,变量以$开始,以便区分是gdb还是调试程序变量。
  变量可为全局或局部,视声明位置。
 例如:
    set $x = 1;

set $SHOW_CONTEXT = 1
set $SHOW_NEST_INSN = 0
set $CONTEXTSIZE_STACK = 6
set $CONTEXTSIZE_DATA  = 8
set $CONTEXTSIZE_CODE  = 8
set $data_addr = 0x400000

set 自定义变量的效果可以用 p 命令来检查

b.2: set 可以直接引用程序地址,计算代码数据位置,直接引用寄存器,可以打印,修改代码和数据

     访问内容数据

   set $_byte1 = *(unsigned char *)$pc
        set $_byte2 = *(unsigned char *)($pc+1)
        set $_byte3 = *(unsigned char *)($pc+2)

修改内存

        set *(unsigned char *)$addr = 0x90

访问寄存器:反过来就是修改i寄存器

                set $oldeax = $eax
                set $oldebx = $ebx
                set $oldecx = $ecx
                set $oldedx = $edx
                set $oldesi = $esi
                set $oldedi = $edi
                set $oldebp = $ebp
                set $oldesp = $esp

 

自动设置断点:
set $_nextaddress = $pc + 0x3
thbreak *$_nextaddress

set 访问用户程序资源的特性使得它可以监视和控制用户程序,这就是debug的核心所在.

再赋予流程控制,就是脚本语言.

3. 函数声明语句:define .. end 语句

具有一定功能的语句块为函数,目的是重用代码和结构化(就是把功能细分的意思)
  define func
  end
  无行参声明,但可以直接用$arg1,$arg2引用, $argc 为形参个数

4. 显示语句: echo
5. 显示语句: printf

6. 条件语句: if..else..end
7. 循环语句: while .. end

8. 说明(帮助)语句: document.. end
  为函数书写帮助说明

9. 常规的gdb 调试命令语句。

10. 支持shell 命令, 可以实现dump, search 等复杂功能

----------------------------------------
自定义 GDB 内存查找
------------------------------------

define search
    set $start = (char *) $arg0
    set $end = (char *) $arg1
    set $pattern = (short) $arg2
    set $p = $start
    while $p < $end
        if (*(short *) $p) == $pattern
            printf "pattern 0x%hx found at 0x%x\n", $pattern, $p
        end
        set $p++
    end
end
document search
Syntax: search
| Search for the given pattern beetween $start and $end address.
end

 


注意:

gdb中使用的变量要加上'$'符号,否则会认为是被调试的程序中的变量

自定义的gdb命令脚本文件,可以用source 命令来导入。

由这几条简单语句已经勾勒出了脚本语言的概貌,可以与计算机交互了! 沟通愉快!

你可能感兴趣的:(调试相关(gdb,kgdb,kdb等))