【问题标题】:C++ vulnerability issue with pointers指针的 C++ 漏洞问题
【发布时间】:2016-09-20 16:05:12
【问题描述】:

在一个测试文档中,我发现有人问我以下代码中的问题是什么:

#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;

int main()
{
    char* a = (char*) malloc (20);
    char* b = (char*) malloc (20);
    strcpy(b, "Secure Coding");
    strcpy(a, "Insecure Coding");
    a = b;
    cout << a << endl;
    cout << b << endl << endl;
    free(a);
    free(b);
    return 0;
}

这是什么?

【问题讨论】:

  • 好吧,你怎么看?您是否分析过代码及其作用?
  • 另外,如果您发布正在编译 代码会有所帮助,因为现在代码的问题在于它无法编译。然而,这与安全或“安全代码”无关。
  • 另外,你为什么用 C# 标记这个问题?那不是 C# 代码,那是 C 或 C++ 代码。
  • 这是C#代码?我一定是做错了……
  • 标签错误,请修正。

标签: c++ security memory-leaks


【解决方案1】:
a=b;

在此分配之后,a 指向与 b 相同的位置(“安全编码”)。您丢失了对 a 指向的初始位置的任何引用,因此“不安全编码”本质上是无法释放的垃圾。

另一个问题是您要释放同一个指针两次。第一次释放后,您不再拥有该内存。

见:What happens when you try to free() already freed memory in c?

【讨论】:

    猜你喜欢
    • 2017-05-12
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2020-06-17
    • 1970-01-01
    相关资源
    最近更新 更多