Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

《软件调试》勘误和意见

帖子发起人: 最爱捉虫   发起时间: 2011-05-06 11:15 上午   回复: 1

Print Search
帖子排序:    
   2011-05-06, 11:15 上午
bkdrong 离线,最后访问时间: 2011/5/6 3:07:18 最爱捉虫

无等级
注册: 2011-05-06
发 贴: 1
SynView 中SymMgr.cpp 中有一个缓冲区溢出的bug

附件: 1.JPG
Reply Quote
在 SymMgr.cpp 中

HRESULT CSymMgr::ListAppend(HWND hWndList, IDiaSourceFile * pSourceFile)
{
    HRESULT hr=S_OK;
    TCHAR        szText[MAX_PATH];
    DWORD       dwData;
    LV_ITEM        lvI;    // list view item structure
    int            row=0x7FFFFFFF;
    BSTR        wszText;
    LONG        lData;
    IDiaEnumSymbols * pEnum;
    IDiaSymbol *pSymbol;
    LPTSTR     lpsz;

    hr=pSourceFile->get_uniqueId(&dwData);
    if(FAILED(hr))
        return hr;
...

TCHAR        szText[MAX_PATH]; MAX_PATH 过小。当我点击附件中的SourceFiles的时候,程序 Crash 了. 堆栈跟踪不了,因此判断缓冲区
过小,将 szText 缓冲区修改为 2048 就 OK 了。

但是 szText 最大长度到底多长合适呢? 动态分配 ?




IP 地址: 已记录   报告
   2011-05-07, 13:50 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: SynView 中SymMgr.cpp 中有一个缓冲区溢出的bug
Reply Quote
是的,这段代码是有溢出的问题,根据文档,目前最长的字段是290,所以可以定义成MAX_PATH*2,更好的办法是使用snprintf()函数,指定缓冲区的长度。记得修改过这个bug,忘记更新到网站了,多谢提出
IP 地址: 已记录   报告
高端调试 » 图书 » 《软件调试》勘误和意见 » SynView 中SymMgr.cpp 中有一个缓冲区溢出的bug

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.