设置变量的值

例子

#include <stdio.h>

int func(void)
{
    int i = 2;

    return i;
}

int main(void)
{
    int a = 0;

    a = func();
    printf("%d\n", a);
    return 0;
}

技巧

在gdb中,可以用“set var variable=expr”命令设置变量的值,以上面代码为例:

Breakpoint 2, func () at a.c:5
5                   int i = 2;
(gdb) n
7                   return i;
(gdb) set var i = 8
(gdb) p i
$4 = 8

可以看到在func函数里用set命令把i的值修改成为8

也可以用“set {type}address=expr”的方式,含义是给存储地址在address,变量类型为type的变量赋值,仍以上面代码为例:

Breakpoint 2, func () at a.c:5
5                   int i = 2;
(gdb) n
7                   return i;
(gdb) p &i
$5 = (int *) 0x8047a54
(gdb) set {int}0x8047a54 = 8
(gdb) p i
$6 = 8

可以看到i的值被修改成为8

另外寄存器也可以作为变量,因此同样可以修改寄存器的值:

Breakpoint 2, func () at a.c:5
5                   int i = 2;
(gdb)
(gdb) n
7                   return i;
(gdb)
8               }
(gdb) set var $eax = 8
(gdb) n
main () at a.c:15
15                  printf("%d\n", a);
(gdb)
8
16                  return 0;

可以看到因为eax寄存器存储着函数的返回值,所以当把eax寄存器的值改为8后,函数的返回值也变成了8

详情参见gdb手册

贡献者

nanxiao