Причина разницы между результатом AddrOfPinnedObject и фактическим адресом массива - PullRequest
0 голосов
/ 25 марта 2020

У меня есть простой массив int. Я использую этот код для получения адреса памяти массива:

            // My App is x64
            GCHandle objHandle = GCHandle.Alloc(MyIntArray, GCHandleType.Pinned);
            IntPtr address = objHandle.AddrOfPinnedObject();
            Console.WriteLine($"My Array Pointer Address : 0x{address.ToString("X8")}");

В результате я получаю 0x24F409F6FE8 .

Я пытался найти его одновременно с помощью сканера памяти, и я искал данные и нашел их в 0x24F409F6FE5

3 меньше результата AddrOfPinnedObject.

Я пытался запустить приложение 20 раз и каждый раз расстояние между адресом AddrOfPinnedObject и фактическим адресом было 3:

AddrOfPinnedObject -> Actual Address
0x152635C6FE8 -> 0x152635C6FE5
0x29D13ED6FE8 -> 0x29D13ED6FE5
0x20198BD6FE8 -> 0x20198BD6FE5
0x22149416FE8 -> 0x22149416FE5
0x2763D396FE8 -> 0x2763D396FE5
and so on...

Пожалуйста, кто-нибудь объяснит, почему это происходит и как я могу получить адрес без такого исправления и получить фактический адрес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...