Есть некая программа. Как мне прочитать строку из памяти по определенному фиксированному смещению в этой программе. Пожалуйста наставьте на путь истинный, никаких идей нет. Если такая тема была хоть ссылку дайте. PS поиском пользовался, но он как-то вяло отреагировал на мою формулировку, все не то
HANDLE hProcess, // handle of the process whose memory is read - PID LPCVOID lpBaseAddress, // address to start reading - это мое смещение LPVOID lpBuffer, // address of buffer to place read data - буфер для приема DWORD nSize, // number of bytes to read - количество байт для копирования LPDWORD lpNumberOfBytesRead // address of number of bytes read - можно проигнорировать Я все правильно понял?
Нет. Первый параметр - хэндл процесса. Используй PID в OpenProcess - и получишь хендл. Второй параметр - адрес в том процессе, из которого читаешь. Последний параметр - не уверен, что можно игнорировать. Почитай примечания к ф-ии.
lpNumberOfBytesRead Можно игнорировать-это адресс переменной куда запишится количество считанных байт.
НЕТ! Твой процесс начинается тока с 400 000h Наверное тебе надо прибавить базу образа. Если это exe, то 400 000h - стандартно. Народ, я ж правильно говорю? А вообще есть программы типа LordPE, которые помогают перевести OFFSET, RVA и VA друг в друга. Тебе нужен VA
А заодно и сами данные - и никаких ReadProcessMemory'ев P.S.: Классный у тебя девиз (ну или подпись) - чего тока не прочитаешь на этом форуме Надо бы и себе чего-нибудь придумать
АЙАЙАЙ, ничего не понимаю. Так что же передать вторым параметром? Я так понял это указатель, но на что?
Второй параметр - это указатель на память в другом процессе, откуда ты начинаешь читать эту самую память. Так вот, 0024067С - это видимо смещение относительно базы образа!!! Т.е. относительно начала файла в памяти. В процессе твои данные будут находится по адресу (400000h + 0024067Сh), т.к. твой файл в памяти будет начинаться именно с адреса 400000h. Т.е. в качестве переметра передай 64067Сh. Просто понимаешь, может быть такая загвоздка: если ты просто тупо сдампил кусок памяти, то твое 0024067С - это RVA. Если ты сдампил все по правилам (т.е. все секции и т.д.), то 0024067С - это может быть OFFSET. А тебе нужен VA. Короче, попробуй ввести 64067Сh. Если не поможет, будем думать над ньюансами.
Хек, при чем тут VirtualProtectEx. Это только в дополнение к ReadProcessMemory да и то, скорее всего, хотя бы доступ на чтение на страницу есть.
файл не обязательно загружаецо с 0х400000, хотя в большинстве случаев это действительно так. зависит от imagebase, который можно посмотреть в заголовке.
Все правильно, действительно надо было передавать 64067Сh. код работает. Всем спасибо! Творческих успехов!
В продолжение темы.... Каким образом можно считать данные с файла, промэппированного в память? Я пытался выделить память alloc'om и скопировать в буфер нужную часть файла (секцию .text) для дальнейшей работы, но чёт не работает... В буфер пишется мусор