.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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д