c++ - 安全使用 strcpy

标签 c++ strcpy exploit

在我们公司的编码标准中禁止使用普通的旧 strcpy,因为它可能会导致缓冲区溢出。我正在寻找我们在代码中链接的一些第 3 方库的源代码。库源代码像这样使用 strcpy:

for (int i = 0; i < newArgc; i++)
{   
     newArgv[i] = new char[strlen(argv[i]) + 1];
     strcpy(newArgv[i], argv[i]);       
}

因为在为要复制到的缓冲区分配内存时使用了 strlen,所以这看起来不错。有没有可能有人可以利用这个正常的 strcpy,或者这是否像我认为的那样安全?

我见过 strcpy 的天真使用导致缓冲区溢出的情况,但这似乎没有,因为它总是使用 strlen 为缓冲区分配正确的空间量,然后使用 argv[ ] 作为应始终以 null 终止的来源。

老实说,我很好奇是否有人使用调试器运行这段代码可以利用这个,或者是否有人试图破解我们的二进制文件(使用我们在其编译版本中链接的库源)可以使用任何其他策略来利用 strcpy 的这种用法。感谢您的投入和专业知识。

最佳答案

安全地使用 strcpy可能 - 这只是相当艰苦的工作(这就是为什么您的编码标准禁止它)。

但是,您发布的代码不是漏洞。无法用它覆盖内存位;我不会费心重写它。 (如果您确实决定重写它,请改用std::string

关于c++ - 安全使用 strcpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50218217/

相关文章:

c - printf中的格式化字符串攻击

c++ - std::set 中的函数和方法指针

c++ - 模态对话框变为非模态

c - C语言程序外的指针和Strcpy

复制无符号字符数组

linux - 为什么 GDB 以小数形式输出内存?

c++ - std 库映射到 boost 库

c++ - const 和 static 一起转换

c - 传递 strcpy 的参数 2 使指针来自整数而不进行强制转换

php - 这个 PHP 利用代码(在我的应用程序中找到)究竟是什么?