cleverman 发表于 2007-8-3 04:10:29

如何debug lsass.exe

这两天需要调试lsass.exe, 昨天baidu竟然都查不到什么信息。lsass有它的一些特点。首先它是运行在user mode, 因此一般来讲应该用user mode的调试工具来调试。可是,如果用debuuger直接跟它相连,计算机就会自动重启,使得调试无法进行下去。其次,如果我们想在机器启动的时候调试lsass也比较麻烦,因为user mode debugger那个时候还不能工作。再次,调试lsass的时候,网络的访问不能进行,因此从网络上访问symbols and source code 也成为了不可能。经过认真研究,发现有三种方法可以用来调试lsass,并且各有优缺点。下面就一一讲解一下。

1. ntsd piped through KD

a. 修改注册表

HKLM\Software\Microsoft\Windows NT\CurrenVersion\Image File Execution Options\lsass.exe debugger = REG_SZ c:\debuggers\ntsd.exe -d -g -G

b. 用另一台机器通过kernal debugger和测试机相连

c.重起测试机

这样的话,在启动阶段,当系统调起lsass的时候,测试机的ntsd就开始工作,并且将输入,输出传送到kernal debugger上。这个属于在kernal debugger里进行user mode的调试。

优点:可以在启动的时候调试lsass。

缺点:symbols and source files 必须要copy在测试机上。(不太方便)



2.Debugging LSA via dbgsrv.exe

a.Find the PID for LSA via tlist.exe

b. C:\Program Files\Debugging Tools for Windows>dbgsrv.exe -t tcp:port=1234,password=spat

c.Run this command to attach to LSA on the remote machine.

I:\debugger>windbg.exe -premote tcp:server=192.168.1.102,port=1234,password=spat -p 596-- where 596 = PID of LSASS

优点:symbols and source files 可以在调试机上

缺点:不能在启动的时候进行调试



3.Debugging LSA from Kernel

a. Get the process address for LSASS

0: kd> !process 0 0 lsass.exe

PROCESS 815196c0 SessionId: 0 Cid: 010c Peb: 7ffdf000 ParentCid: 00e4

DirBase: 042d2000 ObjectTable: 81519aa8 TableSize: 859.

Image: LSASS.EXE

b. Switch to the process context:

Either

.process /p /r 815196c0

Or

.process –i 815196c0 ;g;.reload /user

优点:symbols and source files 可以在调试机上,可以进行log out/ log on 过程的调试

缺点:不能在启动的时候进行调试

因此,如果想在启动的时候调试,就必然要选方法1。如果想在log on的时候调试,选择方法3。其他情况,可以选择方法2,或者方法3。

xiaoshancom 发表于 2007-8-3 09:49:43

微软中国有很多专门的Debugger

cleverman 发表于 2007-8-3 09:53:08

原帖由 xiaoshancom 于 2007-8-3 09:49 发表 http://bbs.51testing.com/images/common/back.gif
微软中国有很多专门的Debugger


什么意思?什么专门的debugger?

xiaoshancom 发表于 2007-8-3 09:55:43

专职Debug的,完后找到合适Owner。

cleverman 发表于 2007-8-3 09:57:35

什么title?

xiaoshancom 发表于 2007-8-3 10:09:24

SDET

SDE/T LEAD

cleverman 发表于 2007-8-3 10:19:35

专门做debugging的SDET?
如果发现bug的时候已经就知道谁是owner了,还需要debugging吗?
还有就是是不是他们只是debugging无法确定owner的bug?
有SDET lead专职做这个?那他们的手下做什么?
如果他们专职做这个,那么必定有其他SDET进行通常的测试。那么专职debugging的和通常SDET的比例是多少?
每个项目都是有PM,DEV,SDET组成的,那么这种专职debugging的SDET是存在于任何一个项目中,还是专门有一个team来解决任何项目的bug呢?

谢谢回答。
页: [1]
查看完整版本: 如何debug lsass.exe