IsBadStringPtr alternative
IsBadStringPtr alternative
本文关键字:alternative IsBadStringPtr 更新时间:2023-10-16
我继承了使用函数
的代码#define CHECK_CSTRING_PTR(a,b) (!IsBadStringPtrA(a,b))
#define INTERNAL_CHECK_CSTRING_PTR(a) CHECK_CSTRING_PTR(a,1)
TCHAR CopyString (const TCHAR * szCopyMe )
{
char * szResult = NULL;
size_t tLength = 0;
/*check the string pointer*/
if ( INTERNAL_CHECK_TSTRING_PTR ( szCopyMe ) )
{
//blah blah
}
}
我在这里读到http://msdn.microsoft.com/en-us/library/windows/desktop/aa366714(v=vs.85).aspx, IsBadStringPtr不应该再使用了。
我应该使用什么替代方案?
我可以简单地使用?
if( szCopyMe != NULL )
谢谢。
正如他们所说,您无法验证指针。在这种情况下,您有两个选项来处理坏指针:
1。让坏指针使程序崩溃
这是Raymond Chen在MSDN博客文章末尾推荐的解决方案:
IsBadXxxPtr应该叫做crashprogramrandom
在这种情况下,你的修复是正确的。
2。使用SEH
捕获异常如果你不想停止应用程序,结构化异常处理可以防止崩溃,但根据一些,这不是一个好主意:
结构化异常处理被认为有害。
没有什么是你可以真正使用的,没有同样的问题。
IsBadStringPtr
的问题是,它通过扫描内存并查看是否有东西损坏来工作。但是,解引用随机指针虽然对操作系统是安全的,但对您的进程可能非常不安全,因为它可以解除对保护页面的保护。即使指针是"有效的",也不能保证它指向的数据是字符串,更不用说你期望的字符串了。除此之外,还有潜在的竞争条件。
如果一个字符串指针被解引用,并且指向无效的内存,你的程序应该崩溃,因为你知道有一个问题,可以修复它。如果你设置了一种情况,你不确定你的字符串指针是否是"真实的",那么你已经输了。你的操作系统会保护一个程序不受另一个程序的侵害,但它不会保护一个程序不受自己的侵害。您需要通过程序的设计来构建这种安全性。
相关文章:
- Boost.Spirit Alternative Parser parallelization
- Alternative to wcsncpy_s
- std::launder alternative pre c++17
- Alternative to timegm on Solaris
- 内存效率高 map<pair<int,int>, set<int>> alternative
- WaitForMultipleObjects alternative with std::thread?
- Win32 alternative to pthread
- QStringList alternative in STL or Boost
- CIN and COUT alternative to QT
- 使用 alternative 变量声明更改 for 循环的范围:
- C++98 alternative to std::stoul?
- String.Format alternative in C++
- Qt QTreeWidget alternative to IndexFromItem?
- Directx 11 Bitblt Alternative
- IsBadStringPtr alternative
- C++ GetAsyncKeyState alternative
- alternative to BOOST_FOREACH with std::set?
- C++ std::string alternative to strcpy?
- C++ 11 alternative pthread_cond_timedwait
- _get_timezone alternative?