2012-05-25 4 views
2

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

Теперь я использую этот код, но не работает

var 
c : char; 

repeat 
    if not ReadProcessMemory(ph, Address, @c, sizeof(c), BytesRead) then 
    raise exception.create(syserrormessage(getlasterror)); 
    result:=result+c; 
    Address:=pointer(integer(address)+sizeof(c)); 
until (c=#0#0) or (BytesRead<>sizeof(c)); 

Эта ошибка возникает

только часть запроса ReadProcessMemory или WriteProcessMemory был завершен

ответ

4

Вы читаете за строкой: вы не читаете байты, а символы, поэтому сравните нулевой ограничитель с символом char, то есть:

until (c=#0) or (BytesRead<>sizeof(c)); 

#0 уже 2 байта, #0#0 составляет 4 байта (он не может быть равна любой Char).

Когда вы прочитали строку и «в область процесса, которая недоступна» (в соответствии с documentation), возвращается ошибка.

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