.NET 4.x Чтение памяти процесса - C#
Формулировка задачи:
Имеется задача прочитать память некого процесса. Моя сборка для 32-битных систем (не могу перейти на 64 из-за совместимости).
В общем проблема в чем.. Пока я "читаю" 32-битные процессы все работает отлично, но как только я пытаюсь прочитать 64-битный процесс, то выпадает исключение
"Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена"
. Я понимаю, что это из-за того, что моя сборка 32-битная. Когда перекомпиливаюсь под 64, то все работает. НО! Так не будет совместимости с 32-битными системами. Можно ли соорудить какой-нибудь костыль? Как из 32-битной сборки прочитать память 64-битного процесса?Решение задачи: «.NET 4.x Чтение памяти процесса»
textual
Листинг программы
int main()
{
MEMORY_BASIC_INFORMATION mbi;
void* mem = nullptr;
for (uintptr_t ptr = (uintptr_t)MAXUINT32 * 50; ptr < MAXINT64; ptr = reinterpret_cast<uintptr_t>(mbi.BaseAddress) + mbi.RegionSize) {
if (!VirtualQuery(reinterpret_cast<void*>(ptr), &mbi, sizeof(mbi))) {
break;
}
if (mbi.State == MEM_FREE) {
mem = VirtualAlloc(mbi.BaseAddress, 4096, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
if (mem) {
break;
}
}
}
if (!mem) {
return 0;
}
for (size_t i = 0; i < 10; i++) {
reinterpret_cast<char*>(mem)[i] = i;
}
printf("mem at %p", mem);
getchar();
return 0;
}