gdb调试技巧
时间:2009-05-06 来源:mumutouv
1.首先我们针对堆和栈中的分析进行gdb调试。
int b; //栈
char s[] = "abc"; //栈 ,在常量区也会有一份,在知道这里的时候会从常量区拷贝一份出来,填充到栈上。
char *p2; //栈
char *p3 = "123456"; //123456\0在常量区,p3在栈上。
static int c =0; //全局(静态)初始化区
p1 = (char *)malloc(10); //堆
p2 = (char *)malloc(20); //堆
(gdb) p &b
$18 = (int *) 0x7fb95db0
(gdb) p &s
$17 = (char (*)[4]) 0x7fb95db4
(gdb) p &p2
$20 = (char **) 0x7fb95dac
(gdb) p &p3
$19 = (char **) 0x7fb95da8
(gdb) p &c
$27 = (int *) 0x410a54
执行到p2 = (char *)malloc(20)的时候,内存堆栈分布情况为:
在调用函数中执行
--参数n
....
参数2
参数1
返回地址
--
在被调用函数中执行
临时变量
c --
b -- 这是一个从静态变量区拷贝过来的数组,放在栈中。
s = a --
b
p2
p3
在mipsel上面反汇编看看,多么整齐的4字节指令啊
(gdb) disassemble main
Dump of assembler code for function main:
0x004006c0 <main+0>: lui gp,0x2
0x004006c4 <main+4>: addiu gp,gp,-31936
0x004006c8 <main+8>: addu gp,gp,t9
0x004006cc <main+12>: addiu sp,sp,-56
0x004006d0 <main+16>: sw ra,52(sp)
0x004006d4 <main+20>: sw s8,48(sp)
0x004006d8 <main+24>: move s8,sp
0x004006dc <main+28>: sw gp,16(sp)
0x004006e0 <main+32>: lw v1,-32740(gp)
0x004006e4 <main+36>: addu zero,zero,v0
0x004006e8 <main+40>: lw a0,2472(v1)
0x004006ec <main+44>: addiu v0,v1,2472
0x004006f0 <main+48>: lw v0,4(v0)
0x004006f4 <main+52>: sw a0,36(s8)
0x004006f8 <main+56>: sw v0,40(s8)
0x004006fc <main+60>: addiu v0,v1,2472
int b; //栈
char s[] = "abc"; //栈 ,在常量区也会有一份,在知道这里的时候会从常量区拷贝一份出来,填充到栈上。
char *p2; //栈
char *p3 = "123456"; //123456\0在常量区,p3在栈上。
static int c =0; //全局(静态)初始化区
p1 = (char *)malloc(10); //堆
p2 = (char *)malloc(20); //堆
(gdb) p &b
$18 = (int *) 0x7fb95db0
(gdb) p &s
$17 = (char (*)[4]) 0x7fb95db4
(gdb) p &p2
$20 = (char **) 0x7fb95dac
(gdb) p &p3
$19 = (char **) 0x7fb95da8
(gdb) p &c
$27 = (int *) 0x410a54
执行到p2 = (char *)malloc(20)的时候,内存堆栈分布情况为:
在调用函数中执行
--参数n
....
参数2
参数1
返回地址
--
在被调用函数中执行
临时变量
c --
b -- 这是一个从静态变量区拷贝过来的数组,放在栈中。
s = a --
b
p2
p3
在mipsel上面反汇编看看,多么整齐的4字节指令啊
(gdb) disassemble main
Dump of assembler code for function main:
0x004006c0 <main+0>: lui gp,0x2
0x004006c4 <main+4>: addiu gp,gp,-31936
0x004006c8 <main+8>: addu gp,gp,t9
0x004006cc <main+12>: addiu sp,sp,-56
0x004006d0 <main+16>: sw ra,52(sp)
0x004006d4 <main+20>: sw s8,48(sp)
0x004006d8 <main+24>: move s8,sp
0x004006dc <main+28>: sw gp,16(sp)
0x004006e0 <main+32>: lw v1,-32740(gp)
0x004006e4 <main+36>: addu zero,zero,v0
0x004006e8 <main+40>: lw a0,2472(v1)
0x004006ec <main+44>: addiu v0,v1,2472
0x004006f0 <main+48>: lw v0,4(v0)
0x004006f4 <main+52>: sw a0,36(s8)
0x004006f8 <main+56>: sw v0,40(s8)
0x004006fc <main+60>: addiu v0,v1,2472
相关阅读 更多 +