Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
evgem
0 / 0 / 0
Регистрация: 16.10.2009
Сообщений: 10
#1

Прочитать память по заданному адресу. - C++

05.11.2009, 21:40. Просмотров 1260. Ответов 3
Метки нет (Все метки)

Надо написать программу на С в Linux, которая находит в памяти другую программу и читает её содержимое. На ассемблере в DOS я это делал. А как здесь?.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2009, 21:40     Прочитать память по заданному адресу.
Посмотрите здесь:

Значение, хранящееся по адресу C++
Данные по адресу памяти C++
C++ Прочитать из памяти по адресу
C++ по адресу получить значение
C++ Можно ли записывать объекты класса string в память, чтоб потом их прочитать?
Доступ к памяти по адресу C++
C++ Необработанное исключение по адресу
Необработанное исключение по адресу C++
C++ Чтение байта по адресу
C++ Необработанное исключение по адресу
C++ Считать из файла по адресу
C++ Необработанное исключение по адресу

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
1696 / 875 / 44
Регистрация: 04.06.2008
Сообщений: 5,342
06.11.2009, 04:15     Прочитать память по заданному адресу. #2
Linux не Linux...
Если прога загружена, то перечисляй все процессы в системе, находи нужный. Потом находи его базовый адрес и размер. Потом делай дамп этого участка памяти. Это в винде. В Linux алгоритм, наверное, тот же. А вот конкретнее по Linux ничё сказать не могу...
Про винду могу чё-нить поразмышлять вслух, если заинтересуешься.
evgem
0 / 0 / 0
Регистрация: 16.10.2009
Сообщений: 10
06.11.2009, 18:06  [ТС]     Прочитать память по заданному адресу. #3
Спасибо за совет. А какими средствами в винде перечислить процессы и потом найти базовый адрес и размер, а также снять дамп?
kravam
быдлокодер
1696 / 875 / 44
Регистрация: 04.06.2008
Сообщений: 5,342
06.11.2009, 18:47     Прочитать память по заданному адресу. #4
Гугли.
Вот для почина тебе как перечислить все процессы в системе
А необходимый ищешь по имени (получаешь PID прцесса)

Потом возможны вариации. Я бы попробовал что попроще:

1) Нашёл полный путь к имени процесса

2) Загрузил этот процесс в память МОЕГО процесса с помощью API-функции :
C++
1
LoadLibrary ("C:\\...ima_modula");
3) Эта функия вернёт адрес в памяти МОЕГО процесса, куда будет загружен нужный процесс (ну, то есть он исполняется в системе сам по себе и ещё один его экземляр просто загружен в память МОЕГО процесса.) Какая часть процесса будет находиться по адресу, возвращённому LoadLibrary?
Заголовок PE-файла

4) Вот анализируй PE-заголовок, набраешь в google "От зелёного к красному", идёшь туда и читаешь ВТОРУЮ часть. Ссылку не даю, ибо там вирусный ресурс, меня забанят. Там бояться не надо, ничё страшного.
В заголовке тебе необходимо найти: адрес, по которому ПРЕДПОЧТИТЕЛЬНО загружается процесс и его размер. Ну, там разберёшься.

5) Этих двух данных хватит, чобы сделать снимок нужного участка памяти необходимого процесса.
Да, ещё хэндл нужено будет. Ну, это ерунда. Находится на раз.
...То есть ситуация такая на данный момент будет: имеешь процесс, снимок которого можешь сделать и имеешь дубликат процесса (этот загружен в твою собственную память)

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

Хотя таблица импорта патчится или нет независимо от его сложности. Но нужна ли на тебе? Что она из себя предсавляет найдёшь в "От зелёного к красному"

6) Если процесс загрузился не по своему родному адресу, сам думай, чё делать.
Yandex
Объявления
06.11.2009, 18:47     Прочитать память по заданному адресу.
Ответ Создать тему
Опции темы

Текущее время: 10:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru