Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 850

Раздел: Delphi » Прочее
/ вопрос решён /

Здравствуйте, эксперты!
Проблема моя, скорее всего не решается с помощью дельфи, а в ассемблере я вообще не фурычу. Но всё же.
Работа с процессами, с чужой памятью. Итак, есть определённое значение. Известно его положение в памяти процесса, известен id процесса, необходимо это значение прочитать\изменить. Это вобщем то и всё, но непонятно можно ли в дельфи вообще работать с чужой памятью? Вроде бы можно с помощью указателей, но я с ними так и не стал разбираться, ибо не нужно было. Ну мой план решения такой:
1. Найти ID процесса,
2. Найти оффсет памяти процесса,
3. Найти точное месторасположение ячейки\ячеек.
4. Прочитать (а в идеале ещё и изменить значение)
Проблема во 2,3 и 4-ом пункте.

Gooddy Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Gooddy (статус: 3-ий класс)
Вопрос отправлен: 27 мая 2009, 14:51
Состояние вопроса: решён, ответов: 3.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Failure!
Ассемблер тут не при чем. он в данном случае параллелен.
для работы с чужой памятью надо использовать ReadProcessMemory и WriteProcessMemory. Рекомендую начать чтение с встроенной справки, а потом
http://programmer.topf.ru/viewtopic.php?id=10
http://www.xakep.ru/post/22263/default.asp
http://4programmers.net/Delphi/ReadProcessMemory
http://www.wasm.ru/article.php?article=apihook_1
Следует помнить, что многие антивирусы могут относиться в Вашей программе с враждебностью. Также некоторые программы сопротивляются, что бы их читали. Поэтому лучше экспериментировать на своем приложении и с отключенными проактивными защитами.
Также не стоит забывать, что подобный код может нарушать законодательство некоторых стран.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 27 мая 2009, 15:30
Оценка за ответ: 5

Комментарий к оценке: Идеально, как всегда, жаль что ответ не на все вопросы.

Ответ #2. Отвечает эксперт: Пупкин В В

Здравствуйте, Failure!
открываем процесс
OpenProcess
читаем (нужно найти то что надо еще)
ReadProcessMemory
пишем
WriteProcessMemory

Ответ отправил: Пупкин В В (статус: 2-ой класс)
Время отправки: 27 мая 2009, 15:32
Оценка за ответ: 5

Комментарий к оценке: На секунду позже)

Ответ #3. Отвечает эксперт: min@y™

Извините, меня не было в инете 2 дня. Может быть поможет мой пример. Это всего лишь демо, однако, посмотри.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 27 мая 2009, 20:07
Оценка за ответ: 5

Комментарий к оценке: Спасибо.

Мини-форум вопроса

Всего сообщений: 8; последнее сообщение — 27 мая 2009, 16:22; участников в обсуждении: 3.
Пупкин В В

Пупкин В В (статус: 2-ой класс), 27 мая 2009, 15:33 [#1]:

сори отправлял ответ, ответа Вадима К не было (
Gooddy

Gooddy (статус: 3-ий класс), 27 мая 2009, 15:34 [#2]:

Ничего, ваш ответ содержит ещё 1 полезную функцию:)
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 27 мая 2009, 15:37 [#3]:

Ну я так понял что мне придётся работать с памятью как со стимом?
Чисти код! Чисти код! Чисти код!
Вадим К

Вадим К (статус: Академик), 27 мая 2009, 15:46 [#4]:

нет, как с массивом байт на 4 гигабайта.
Галочка "подтверждения прочтения" - вселенское зло.
Gooddy

Gooddy (статус: 3-ий класс), 27 мая 2009, 15:49 [#5]:

не совсем понятно почему 4 гигабайта. массив байт тоже не плохо. спасибо за помощь. очень быстро и всё что нужно. даже больше.
Чисти код! Чисти код! Чисти код!
Вадим К

Вадим К (статус: Академик), 27 мая 2009, 16:05 [#6]:

ну как почему? потому что любому приложению под Win32 выдается 4 гига памяти. Другое дело, что не вся она доступна... Но это уже другое дело.
Галочка "подтверждения прочтения" - вселенское зло.
Gooddy

Gooddy (статус: 3-ий класс), 27 мая 2009, 16:17 [#7]:

мм. спасибо. непонятно почему дают работать со всей памятью, но в общем решаемо ограничением.
Чисти код! Чисти код! Чисти код!
Вадим К

Вадим К (статус: Академик), 27 мая 2009, 16:22 [#8]:

Почему? да всё просто. Например часть памяти доступно только для чтения. Первый мегабайт вообще особняком сидит - это дань DOS'у. Также нельзя обращаться к памяти, которая не была выделенная.
Говоря о том, что выдается 4 гигабайта, никто не говорит, что что всё оно будет доступно. Приложение должно выделять для себя память.
А может быть запрещено чтение/запись по той причине, что прав не хватает.
Галочка "подтверждения прочтения" - вселенское зло.

31 января 2011, 19:23: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:42
Выполнено за 0.02 сек.