0

私は動的サイズのメモリプールのアイデアを試していましたが、失敗するだろうと確信していたが失敗しなかったいくつかのコードに行き着きました。コードは次のとおりです。

#include <iostream>

using namespace std;

struct largeStruct
{
    largeStruct()
    {
        X = 123456789;
        Y = 987654321;
        str = "Hy! Here I am, a c string, out in the wild c++, the place where your pointers dangle and your friends play with your privates";
    }
    unsigned long long X;
    unsigned long long Y;
    char* str;
};

int main()
{
    void* ptr = new unsigned char[sizeof(largeStruct)];

    largeStruct a;
    *((largeStruct*)ptr) = a;

    cout << "Size of data: " << sizeof(largeStruct) << endl;
    cout << "Data: " << endl;
    cout << ((largeStruct*)ptr)->X << endl
         << ((largeStruct*)ptr)->Y << endl
         << ((largeStruct*)ptr)->str << endl
         << endl;

    delete[] ptr;
}

それは私のPC(Windows 8、MSVC Express 2012)で動作します。もう少し考えてみると、ハックですが、ある程度の意味があると思います。メモリ内の配列は次のようになります。

===================================
... ||  a0  ||  a1  ||  a2   || ...
===================================

したがって、配列メンバーの 1 つよりも大きい値を格納しようとすると、側のメモリにアクセスします。したがって、3 チャンク サイズの値を保存しようとすると、次のようになります。

====================================
... || data  data  data  data || ...
====================================

では、これは危険なのですか、それとも無害な無害なハッキングですか?

4

1 に答える 1