Я настоятельно рекомендую вам использовать IntPtr и Marshal.Copy. Вот код, который поможет вам начать.
memAddr - это адрес вашей памяти, а bufSize - это размер.
IntPtr bufPtr = new IntPtr(memAddr);
byte[] data = new byte[bufSize];
Marshal.Copy(bufPtr, data, 0, bufSize);
Для этого не требуется использовать небезопасный код, для которого требуется параметр компилятора / unsafe и который не проверяется CLR.
Если вам нужен массив чего-то кроме байтов, просто измените вторую строку. Marshal.Copy имеет кучу перегрузок.