2017-02-08 6 views
0

Используя NtQueryInformationProcess, можно получить текущий базовый адрес процесса, прочитав поле PebBaseAddress в возвращаемой структуре типа PROCESS_BASIC_INFORMATION.Зачем использовать ReadProcessMemory() с дескриптором текущего процесса?

Я видел код, который использует ReadProcessMemory() для чтения памяти относительно базового адреса текущего процесса, так как первые несколько байтов содержат некоторые указатели, которые показывают подробную информацию о процессе. Мне также нужно было получить часть этой информации, и research показал мне, как это сделать.

Я все еще смущен, однако, почему ReadProcessMemory() требуется при чтении памяти из текущего процесса. Невозможно разыменовать указатель относительно базы процессов или может ли это привести к ошибке сегментации? Имеются ли указатели в отношении технологической базы?

+1

Это не требуется. Очень легко проверить, просто попробовав его. –

+0

ReadProcessMemory широко используется для чтения памяти других процессов. В вашем случае вы можете использовать указатели – Asesh

+0

@HansPassant Просто попытка не гарантирует, что он будет успешным во всех возможных случаях, следовательно, вопрос. –

ответ

2

ReadProcessMemory будет проверять, что диапазон адресов в вашем собственном процессе действителен и возвращает ошибку (ERROR_PARTIAL_COPY) в случае проблемы вместо сбоя.

Кроме этого, я не вижу причины. Если вы уверены, что указатель верен, лучше использовать (и быстрее) использовать memcpy.

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

  • Нет связанных вопросов^_^