2013-01-02 3 views
-1

Полагаю, что отладчики используют ReadProcessMemory (в среде Windows) для чтения памяти другого процесса. Что мне интересно: ReadProcessMemory считывает память другого процесса в буфер, чтобы вызвать накладные расходы. Разве отладчики читают небольшие куски памяти или читают ли они всю память процесса за один выстрел?Как работают отладчики с ReadProcessMemory?

+0

Не выглядит подотчетным для меня. Есть много разных отладчиков, и они могут делать все, что работает для каждого конкретного случая. Вероятно, большинство из них будут читать в кусках, если это потребуется вообще ... Особенно в x64 :) также можно представить, что читает весь 16/32 бит пространства процесса в большой 32/64 бит процесс для анализа. –

+2

Я никогда не писал отладчик, но если бы я это сделал. Если пользователь запрашивает трассировку стека, имеет смысл прочитать стек (около 1 МБ) этого потока. Если пользователь хочет распечатать переменную, прочитайте память только для этой переменной. –

ответ

0

API не гарантирует атомное считывание. В конце концов он копирует данные (в отличие от предоставления доступа к исходным байтам с помощью сопоставления адресов), и если debuggee все еще работает, он может изменять эту память во время вызова API.

Смежные вопросы