Здравствуйте! Программирую под Windows Mobile 6.0, программа должна снимать дамп заданного процесса и скидывать его в файл. Использую функцию ReadProcessMemory. Вторым параметром этой функции необходимо указать адрес (внутри адресного пространства) откуда начинать считывать. Пробовал для нескольких процессов, ни для одного функция не хочет считывать дамп с начала (с адреса 0). У каждого процесса в начале его адрессного пространства есть участок памяти которы функция не может считать (у всех процессов он разной длины) а дальше нормально дампится. С чем это может быть связано? и как мне снять полностью дамп памяти процесса?
0 == NULL, поэтому и не используется Не знаю как в Mobile, но в обычной винде виртуальная память выделяется не сплошняком, а отдельными кусками - хотя бы потому, что VirtualAlloc позволяет просто резервировать адреса для будущего использования, не выделяя под них реальную память и соотв-но попытка чтения по таким адресам ес-но приводит к облому. Поэтому перед тем как что-то читать нужно проверить возможность чтения вызовом VirtualQueryEx
NtOpenProcessToken, NtAdjustPrivilegesToken, NtQueryVirtualMemory, RtlQueryProcessDebugInformation, NtSuspendProcess, NtOpenProcess, NtProtectVirtualMemory, NtReadVirtualMemory и т.д. + NtQuerySystemInformation ->uAllocationGranularity и uPageSize
Чуть ошибся, для всех процессов функция дампит не раньше адреса 69632, после этого числа все норм. А функция VirtualQueryEx вроде бы под mobile не пашет
69632 = 0х11000 Скорее всего также как и в Виндах начальные адреса "закрыты" с целью отлова грубых ошибок. Возможно там микро-ядро или еще что.
Kostia13 если как тут предполагают он "закрыт" для отлова ошибок, то из него читать просто нечего! И хватит уже демонстрировать свою полную некомпетентность идите почитайте что-нибудь вроде Ричарда
Вам нужен дамп или вы "роете в глубь" ? В любом случае это вопросы не для раздела RESEARCH. Тут по идее надо свои наработки представлять и уточняющие вопросы задавать, а не новичковские ...