Поиск строки в адресном пространстве запущенного процесса
От: stbzh  
Дата: 30.07.14 14:45
Оценка:
Привет всем!
Неоднократно сталкивался с необходимостью исследования больших программ доставшихся в наследство. В этот раз решил поднять этот вопрос и узнать кто как выходит из положения, может использует что то готовое...
Описание проблемы: Есть приложение, состоящее из экзешника и нескольких ДЛЛ (QtCore, QtGui, и еще парочка своих собираемых из довольно таки большого легаси кода). Разбираться в дебрях этого легаси кода слишком-слишком долго и неприятно (там и куча сторонних библиотек, причем патченых, и конвертируемый в С++ джава код на этапе сборки СМаке, вобщем ад). Документации как водится нет. Работаю под Win 7. Разработка в MS VS 2013 Express. Код — С++ 2003.
В процессе работы приложения загружается название улицы для отображения на карте. Нужно проникнуть внурть кода, отрисовывающего эту часть. Код находится внутрях большой и очень запутанной легаси-длл, которую я использую как пользователь, но имею возможность менять код.
Идея: создать алгоритм, который при старте проги получал бы диапазон адресов процесса и сканировал бы эту память на поиск заданного имени, чтобы потом поставить бряк на доступ к этой памяти и по срабатыванию курить стек.
Чстно говоря выглядит это для меня утопично, ибо искомое имя загружается этой легаси-длл и я не представляю в какой части адресного пространства оно может оказаться и как определить из екзешника сканировать ли хип, стек, или вообще статическую область памяти (есть там и такие трюки типа своих аллокаторов и пр.)
К тому же поставить бряк на изменение области памяти я знаю что можно, а вот на доступ к этой памяти?
Я уже подзабыл как загрузчик работает в винде, забыл PE формат, RVA и пр. Помню что адресс загрузки ДЛЛ является скорее рекомендацией и может отличаться. Помню о том что верхние адреса — системные, что хип и стек растут в разные стороны. И все это незнание как бы намекает, что эта задача может быть для меня еще более сложной, чем просто шаг за шагом погружаться в хитросплетения исследуемой легаси-длл.
Кто как поступает в таких случаях? Есть ли инструменты для поиска в процессе с учетом длл (причем это не ресурс-хакеры)?

31.07.14 12:56: Перенесено модератором из 'C/C++' — Кодт
debug dll memory allocation
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.