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

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

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

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

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

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

Прочитать из памяти по адресу - C++
Задача: в памяти по адресу 0040:0010h (0x00400010) записано слово (информация о подключенном оборудовании). Нужно прочитать 12-й бит этого...

Можно ли записывать объекты класса string в память, чтоб потом их прочитать? - C++
Создал класс, который содержит много объектов класса string, но что то не так как надо. В debug режиме удаётся прочитать и вывести, но...

Необработанное исключение по адресу - C++
Описать процедуру SortInc(A,N), выполняющую сортировку по возрастанию массива А из N вещественных чисел. Массив А является входным и...

Доступ к памяти по адресу - C++
Есть структура, элементы которой адрес на начало массива в памяти и его размер. Адреса хранятся в 16-ричном формате. Мне нужно распечатать...

Необработанное исключение по адресу - C++
Необработанное исключение по адресу...нарушение прав доступа при чтении по адресу... #include <iostream> #include <conio.h> #include...

Данные по адресу памяти - C++
У меня есть адрес например 0x11E9B62C как узнать что по нему записанно?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
06.11.2009, 04:15     Прочитать память по заданному адресу. #2
Linux не Linux...
Если прога загружена, то перечисляй все процессы в системе, находи нужный. Потом находи его базовый адрес и размер. Потом делай дамп этого участка памяти. Это в винде. В Linux алгоритм, наверное, тот же. А вот конкретнее по Linux ничё сказать не могу...
Про винду могу чё-нить поразмышлять вслух, если заинтересуешься.
evgem
0 / 0 / 0
Регистрация: 16.10.2009
Сообщений: 10
06.11.2009, 18:06  [ТС]     Прочитать память по заданному адресу. #3
Спасибо за совет. А какими средствами в винде перечислить процессы и потом найти базовый адрес и размер, а также снять дамп?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2009, 18:47     Прочитать память по заданному адресу.
Еще ссылки по теме:

Считать из файла по адресу - C++
в Мемо1 мы записываем адрес состоящий из цифр от 01 до 12 которые соответствуют номеру строки и колонки в таблице как сделать чтобы в Мемо2...

Чтение байта по адресу - C++
Мне нужно прочитать значение байта по адресу F000:FFFE. Не знаю, как это возможно сделать Вот пробую вот так: char *p; ...

Необработанное исключение по адресу - C++
Доброго времени суток! Долгое время учился кодить на Паскале, в данный момент появилось желание начать кодить на С. В общем хотел...

по адресу получить значение - C++
Господа создаю программу которая задаёт значение и показывает адрес ячейке , запускаю её и в другой программе в исходник пишу этот адрес ,...

Значение, хранящееся по адресу - C++
Как узнать адрес, по которому находится значение переменной, я уже знаю. это с помощью = &var А как узнать значение по адресу...

Необработанное исключение по адресу - C++
Доброго времени суток!!!!:) ест программа в ней переменная которой присваивается ссылка после чего программа немного ее корректирует и...


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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
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     Прочитать память по заданному адресу.
Ответ Создать тему
Опции темы

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