美文网首页
C运行库中的安全字符串函数

C运行库中的安全字符串函数

作者: 7bfedbe4863a | 来源:发表于2018-01-19 22:18 被阅读0次

    安全隐患:目标字符串缓冲区不够大,无法容纳所生成的字符串,就会导致内存中的数据被破坏。

    • strcpy和wcscpy(以及其他的大多数字符串处理函数),没有指定缓冲区最大长度的参数,所以函数不知道自己会破坏内存,也就不会报错。
    • strlen、wcslen、_tcslen等函数不会修改传入的字符串,所以这些函数没有问题。
    头文件

    StrSafe.h(在包含这个头文件的时候,String.h也会被包含进来)

    • 必须在包含了其他所有的文件以后才包含StrSafe.h。
    • 包含了这个头文件之后,C运行库中现有的衣服穿处理函数已被标记为废弃不用,如果使用了这些函数,编译会警告。
    • 使用(替换)的时候吗要考虑是否可能发生缓冲区溢出,如果不能从错误中恢复了,那么至少要考虑如何终止应用程序(尽可能优雅)。
    函数

    现有的每一个函数,都有一个对应的新版本的函数,前面的名称相同,只是在最后添加了_s(代表secure)后缀。

    • 首先验证传递给它们的参数值。(指针不为MULL,整数在有效范围内,枚举值是有效的,缓冲区足以容纳结果数据),如果有任何一项失败,函数会设置局部于线程的c运行时变量errno(并返回一个errno_t来指出成功或失败)。
    • Debug Build的时候,如果检查失败,会弹出Debug Assertion Failed对话框,然后终止应用程序。
    • Realse Build的时候,如果检查失败,会直接自动终止应用程序的运行。

    具体的使用和对比什么的,明天再继续吧……

    相关文章

      网友评论

          本文标题:C运行库中的安全字符串函数

          本文链接:https://www.haomeiwen.com/subject/elnaoxtx.html