Для того, чтобы глубже понять, как распределяется и хранится память, я написал приложение, которое может сканировать адресное пространство памяти, находить значение и записывать новое значение.
Я разработал пример приложения с конечной целью, чтобы иметь возможность программно найти мой массив и перезаписать его новой последовательностью чисел. В этой ситуации я создал одномерный массив из 5 элементов, например
int[] array = new int[] {8,7,6,5,4};
Я запустил свое приложение и искал последовательность из пяти чисел выше. Я искал любое значение, которое упало между 4 и 8, всего 5 чисел подряд. К сожалению, мои последовательные числа в массиве соответствовали сотням результатов, так как числа от 4 до 8 ни в какой конкретной последовательности не оказывались рядом друг с другом, в памяти, во многих ситуациях.
Есть ли способ отличить, что набор чисел в памяти представляет собой массив, а не просто целые числа, которые находятся рядом друг с другом? Есть ли способ узнать, что, если я найду определенное значение, что соответствующие ему значения соответствуют массиву?
Я бы предположил, что когда я объявляю int[] array
, это указывает на первый адрес моего массива, который предоставит метаданные своего рода тому, что существовало в массиве, например
0x123456789 meta-data, 5 - 32 bit integers
0x123456789 + 32 "8"
0x123456789 + 64 "7"
0x123456789 + 96 "6"
0x123456789 + 128 "5"
0x123456789 + 160 "4"
Я далеко от базы?