[原创]国庆假期很闲之针对 VS2019 + WDK10 生成驱动关不掉pdb符号文件的研究
2022-10-2 13:24:34 Author: bbs.pediy.com(查看原文) 阅读量:4 收藏

[原创]国庆假期很闲之针对 VS2019 + WDK10 生成驱动关不掉pdb符号文件的研究

6天前 3167

[原创]国庆假期很闲之针对 VS2019 + WDK10 生成驱动关不掉pdb符号文件的研究

引用自:WDK10 + VS2019 关不掉符号开关

两年前,这个问题一直就这样挂起了,本着闲来无事找事的心态,把事情的前因后果从头分析了一遍

玩过VS的应该都知道,这样一来,不管是创建dll或者exe就不会生成pdb符号文件了

但是用WDK10创建驱动就不一定了,创建sys始终会生成pdb文件,那么问题来了,pdb符号文件是生成的呢

可能有些人不知道,VS的开发工具里面有一个mspdbsrv.exe这个进程名字大概可以猜出来,就是它生成pdb符号文件的

那么继续反推,VS是如何调用这个进程的呢?

看到这里,link.exe有没有熟悉的感觉呢?没错,就是link调用的mspdbsrv,那就继续回溯,来看一下堆栈

link通过CreateProcess调用mspdbsrv,有了这条线索,那么接下来就好办了,直接用OD附加link

根据上面的截图来对比分析,来到 link.exe + 0x30d60

也就是说,判断 cmp byte ptr ds:[0x6980F9],0x0 里面的值不为0,才会调用mspdbsrv


IDA可以发现这里面的初始值就是1,那意思就是,如果不生成pdb文件,就需要调用一段代码去把这里面的值写成0,继续回溯分析

如上截图,and byte ptr ds:[0x6980F9],al 写入了0,所以就不生成pdb文件

而前面生成驱动的时候,那个0x20000标记,就会跳过写入0

现在一切变得越来越清晰了

mov edx,dword ptr ss:[ebp-0x45C]

test dword ptr ds:[edx+0x150],0x20000

问题似乎就出在这个0x20000的标记上,但是哪里又写入了0x20000呢?接下来谜底该彻底揭开了

0056C861    68 44495100                 push link.00514944                        ; UNICODE "profile"

0056C866    FF37                        push dword ptr ds:[edi]

0056C868    FF95 68DCFFFF               call dword ptr ss:[ebp-0x2398]

0056C86E    59                          pop ecx

0056C86F    59                          pop ecx

0056C870    85C0                        test eax,eax

0056C872    0F84 F2520500               je link.005C1B6A                          ; 跳过去

就来到

005C1B6A    818E 50010000 00000200      or dword ptr ds:[esi+0x150],0x20000       ; 给了0x20000

005C1B74  ^ E9 DEAFFAFF                 jmp link.0056CB57

"profile",是的,最终矛头就是指向配置文件,找一下链接器高级选项

改成否,VS创建驱动再也不会生成pdb符号文件了

exe或dll工程这个选项默认就是否,但是驱动却给了/PROFILE

很难想象,也很难注意到,这个选项居然跟pdb符号文件有关

原来如此,高级也并不高级,微软这么干,目的何在?

看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~

最后于 6天前 被yy虫子yy编辑 ,原因:


文章来源: https://bbs.pediy.com/thread-274619.htm
如有侵权请联系:admin#unsafe.sh