首页
社区
课程
招聘
未解决 [求助] 关于分析报告的缓冲区溢出
发表于: 2019-4-23 09:19 1211

未解决 [求助] 关于分析报告的缓冲区溢出

2019-4-23 09:19
1211
使用c/c++的VS分析工具,提示这个;
WCHAR szExePathW[MAX_PATH];
GetModuleFileNameW(NULL, szExePathW, sizeof(szExePathW));

WCHAR butf[5] = { 0 };
char szIteFile[] = "6666";
MultiByteToWideChar(CP_ACP, NULL, szIteFile, strlen(szIteFile), butf, sizeof(butf));

经测试:


输出结果都一样,也没有内存报错
使用以下方法同样没有内存保存.

那么问题来了. Windows提供的这些API,参数究竟是传递1字节为单位的缓冲区大小,还是根据WCHAR和CHAR不同进行独立计算缓冲区大小?
VS分析工具分析的是对的还是错的?   
GetModuleFileNameA和 GetModuleFileNameW提供解释都是TCHAR 也就是WCHAR. 直接都按宽字符算,但是实际操作发现它和MultiByteToWideChar一样
MultiByteToWideChar提供的解释是 characters 也就是char. 按单字符算.但是实际操作发现好像并不是这样..
以上是根据网页翻译的,我也不知道理解是否对错...

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-4-23 09:24 被ezrealik编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 73
活跃值: (923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个具体看要看MSDN的描述,如果他说是bytes,那就是字节数,如果说是character,那就是字符
GetModuleFileName的nSize参数是这样说的:
The size of the lpFilename buffer, in TCHARs
只要没有说是bytes,那都是按照字符数计算,也就是_tcslen()
最后于 2019-4-24 19:06 被zx_348891编辑 ,原因:
2019-4-24 19:04
1
游客
登录 | 注册 方可回帖
返回
//