_tcscat在Debug和Release下的问题

上一篇 / 下一篇  2015-04-27 20:39:50 / 个人分类:C\C++

背景: 
有如下这么一段代码,作用是获取当前程序的所在路径(C:\work\A.exe),然后将”A.exe”去掉,拼装为”C:\work\inject.dll”

TCHAR szDllPath[MAX_PATH] = _T("");
TCHAR szExePath[MAX_PATH] = _T("");

GetModuleFileName(GetModuleHandle(NULL), szExePath, MAX_PATH);

int nIndex =0;
int i = lstrlen(szExePath);while(i >0)
{if(szExePath[i] == _T('\\'))
    {
        nIndex = i;break;
    }
    i--;
}for(i =0; i < nIndex +1; i++ )
{
    szDllPath[i] = szExePath[i];
}

_tcscat(szDllPath, _T("InjectDll.dll"));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

问题

1.Debug模式下运行,得到的结果是预期的"C:\\work\\inject.dll"。

   2.Release模式下运行,得到的结果却是"C:\\work\\",也就是_tcscat函数运行不成功。

结论

1.发现使用_tcscat可能存在风险问题,换用_tcscat_s就OK了。

   2.自从vc2005开始,微软力推_s安全版函数以取代不安全的标准非_s版函数,例如:strcat_s、strcopy_s、sprintf_s、_tcsnset_s、_tcsset_s、_tcstok_s...等等

   3.代码静态走查是可以关注字符串运算是否使用了_s安全版函数。

TAG:

 

评分:0

我来说两句

诸葛东明

诸葛东明

搜狗公司搜狗浏览器测试经理。2008年加入搜狗公司,负责搜狗浏览器的相关测试工作,见证了搜狗浏览器从无到有的过程。

日历

« 2024-04-13  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 31322
  • 日志数: 19
  • 建立时间: 2008-06-03
  • 更新时间: 2015-06-23

RSS订阅

Open Toolbar