Здравствуйте, я пытаюсь сбросить память процесса в Android / Linux. Прямо сейчас я читаю карты памяти, чтобы получить адресное пространство области памяти, и затем я читаю каждое слово, как это:
ptrace(PTRACE_ATTACH, pid, NULL, NULL);
wait(NULL);
read each word in this memory region:
word = ptrace(PTRACE_PEEKDATA, pid, (void *)address, NULL);
ptrace(PTRACE_CONT, pid, NULL, NULL);
ptrace(PTRACE_DETACH, pid, NULL, NULL);
Разве не существует более эффективного решения, читающего непосредственно всю страницу памяти путем указания начала / конца адресного пространства памяти для чтения?
Существует два возможных способа более эффективного чтения памяти из другого процесса.
Если ваше ядро поддерживает это (я понятия не имею о ядрах Android), вы можете использовать process_vm_readv
,
Другой способ — открыть /proc/.../mem
файл целевого процесса и чтение из него. GDB использует этот метод, хотя я думаю, что только потому, что process_vm_readv
является «новым» (в терминах GDB).
Других решений пока нет …