Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 17

Работа с памятью программы

25.10.2019, 14:08. Показов 2149. Ответов 19

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Стараюсь написать программу которая будет получать с другой программы данные, то есть будет считывать данные с определенного процесса/памяти. Но мне нужна помощь с адресацией а именно: допустим программа просто выводит число 22 и строку "test" использую ArtMoney можно найти адреса этих значений и их передать но при повторном включении спустя какое то время адреса будут другие. Вопрос: как можно узнать (и можно ли вообще) адреса данных строк? Что для этого нужно?
Не судите строго за мой вопрос, сам не могу разобраться
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.10.2019, 14:08
Ответы с готовыми решениями:

Работа с памятью
Всем Привет!!!:) Подскажите как узнать сколько строк храниться в переменной pzap = ^tzap; tzap = record ...

Работа с памятью
Просьба помочь в информации по: Работе с памятью ; Выделение адресного пространства ; Чтение редактирование участка памяти; Чтение...

Работа с памятью процесса
Известен адрес в памяти другого процесса, необходимо читать и изменять значение по этому адресу

19
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 17
08.11.2019, 09:10  [ТС]
Погуглив немного я выяснил что адреса смещения можно узнать но для этого советуют использовать дезасемблер. Каких то явных программ которые смогут дать такое результат пока не нашел... Если кто то знает буду раз за информацию
0
231 / 163 / 54
Регистрация: 26.10.2014
Сообщений: 928
08.11.2019, 09:59
STest6905, когда речь о дизассемблировании - используйте hiew. Там можно увидеть и абсолютные адреса и со смещением.
Только я не уверен что смещение в exe файле поможет вам как то
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 17
08.11.2019, 10:03  [ТС]
mac1eod,
Почему? Я конечно не до конца понимаю но разве смещение не одинаковые? То есть после перезапуска значения смещений всегда будут одинаковые или я ошибаюсь? Источника где описано как ведет себя программа в памяти я не нашел...
0
Нарушитель
10228 / 5658 / 1259
Регистрация: 12.03.2015
Сообщений: 26,227
08.11.2019, 10:09
Когда-то при царе Горохе, когда деревья были большими, трава - зеленее, пиво - вкуснее, а девки - сисястее, проводил я такие эксперименты - чтение чужой памяти с помощью функции ReadProcessMemory(). Щас еле раскопал в архиве свои демо-исходники, ещё для Delphi 7. Попробовал запустить бинарник под Windows10x64 - ОНО РАБОТАЕТ!

Кек.

Вложения
Тип файла: 7z ReadProcessMemory.7z (201.3 Кб, 21 просмотров)
1
231 / 163 / 54
Регистрация: 26.10.2014
Сообщений: 928
08.11.2019, 10:11
STest6905, про устройство exe, в том числе и про смещение https://habr.com/ru/post/266831/
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 17
08.11.2019, 10:14  [ТС]
Verevkin, Под чтением чужой памяти вы имеете ввиду какую то программу запущенную на том же компьютере?
За код спасибо, посмотрю для развития

Добавлено через 1 минуту
mac1eod, и вам спасибо. Довольно много интересной информации на собиралось!!!
0
Нарушитель
10228 / 5658 / 1259
Регистрация: 12.03.2015
Сообщений: 26,227
08.11.2019, 10:33
Цитата Сообщение от STest6905 Посмотреть сообщение
Под чтением чужой памяти вы имеете ввиду какую то программу запущенную на том же компьютере?
1
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 17
08.11.2019, 10:50  [ТС]
Verevkin, просмотрел код все стало ясно))) В вашем примере для получения данных вы сканируете всю память, пока не разобрался вы может подскажите можно ли сразу считывать данные зная смещения?
0
Нарушитель
10228 / 5658 / 1259
Регистрация: 12.03.2015
Сообщений: 26,227
08.11.2019, 10:56
Цитата Сообщение от STest6905 Посмотреть сообщение
можно ли сразу считывать данные зная смещения?
Да, можно.
0
561 / 230 / 88
Регистрация: 11.07.2015
Сообщений: 817
08.11.2019, 11:40
Цитата Сообщение от STest6905 Посмотреть сообщение
допустим программа просто выводит число 22 и строку "test" использую ArtMoney можно найти адреса этих значений и их передать но при повторном включении спустя какое то время адреса будут другие
А что взять эти данные из окон программы не работает.
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 17
08.11.2019, 12:11  [ТС]
UR1004SWL, не до конца понятен ваш вопрос.... Что вы имеете ввиду?

Добавлено через 7 минут
Цитата Сообщение от Verevkin Посмотреть сообщение
Да, можно.
Подскажите каким лучше методом можно получить значения смещений?
Дезасемблирование само собою, может есть альтернатива...
0
561 / 230 / 88
Регистрация: 11.07.2015
Сообщений: 817
08.11.2019, 12:37
Цитата Сообщение от STest6905 Посмотреть сообщение
допустим программа просто выводит число 22 и строку "test"
Эти данные программа у себя куда то выводит.
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 17
08.11.2019, 12:49  [ТС]
UR1004SWL, по моему нет, она только отображает.
Если я вас понял правильно вы хотите сказать что нужно считывать лог файл и все или же базу куда она может писать данные, так?
0
561 / 230 / 88
Регистрация: 11.07.2015
Сообщений: 817
08.11.2019, 13:15
Цитата Сообщение от STest6905 Посмотреть сообщение
она только отображает
Берём данные где отображает, это вроде как StringGrid.
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 17
08.11.2019, 13:35  [ТС]
UR1004SWL, я либо вас не понимаю или же вы не так поняли поставленную задачу...
0
Нарушитель
10228 / 5658 / 1259
Регистрация: 12.03.2015
Сообщений: 26,227
09.11.2019, 23:13
Цитата Сообщение от STest6905 Посмотреть сообщение
одскажите каким лучше методом можно получить значения смещений?
Дезасемблирование само собою, может есть альтернатива...
Понятия не имею.
Кликните здесь для просмотра всего текста


0
10.11.2019, 02:13

Не по теме:

Цитата Сообщение от STest6905 Посмотреть сообщение
Дезасемблирование само собою, может есть альтернатива...
Читеры must die! Особенно такие ленивые и малограмотные.

0
Модератор
10364 / 5651 / 3397
Регистрация: 17.08.2012
Сообщений: 17,244
10.01.2020, 15:43
STest6905, действительно, изучите хоть что-нибудь о механизмах взаимодействия операционной системы с программами. Судя по... Так скажем... Стилистике... Ваших вопросов, Ваша хотелка может быть реализована лично Вами весьма и весьма не скоро.

Если вкратце.

Скорее всего, в Вашем случае, нужно будет изучить WinAPI. Получить данные из окна приложения достаточно просто. Получаете хендл нужного Вам приложения, и, (если возможно,) хендл объекта, в который выводятся нужные Вам сообщения, ну, или, на худой конец, хендл объекта, который выводит нужные Вам сообщения в другой объект. Перехватываете целевые сообщения, и сохраняете их, куда Вам нравится. Обычно всё это достижимо. Но не всегда.

Дизассемблирование, как правило, нужно лишь как дополнительный инструмент при частичном парсинге структуры целевой программы, но может понадобиться и в том случае, если вывод нужных данных производится, скажем так, стандартными, но не слишком распространёнными, методами. Например, приложение может использовать контекст устройства (Device Context, DC), в том числе, может использоваться и контекст графического дисплея. Тогда вывод может осуществляться не с помощью функций WinAPI, а непосредственно в виртуальное окно приложения, да ещё текст может выводится не в текстовой форме, а в виде точечного рисунка. Тогда Ваша хотелка становится и вовсе трудно осуществимой. Придётся не только перехватывать данные (фактически - битмап), но и отслеживать, откуда вообще этот рисунок берётся, и, при невозможности определения по свойствам рисунка (его источнику, имени, размеру и так далее) содержащегося в нём текста, придётся применять какие-либо OCR, либо сторонние, либо написанные самостоятельно.

Не знаю, что Вы собираетесь перехватывать, но так, на всякий случай: DC Compatible BitMap в играх используется чуть ли не всегда, но ещё чаще используется непосредственный вывод на экран. Непосредственный вывод на экран, да и вывод в DC Compatible BitMap тоже, значительно быстрее вывода через оконные сообщения операционной системы. И текст, как правило, выводится не в виде текста, а сразу в виде рисунка, поскольку зачастую используется специальный шрифт. В случае непосредственного вывода на экран, скорее всего, ничего, кроме захвата графического экрана с последующей обрезкой и распознаванием текста, не поможет.
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 17
10.01.2020, 17:56  [ТС]
Cyborg Drone, Спасибо за ответ. Суть моего вопроса была в том что бы получить данные из сторонней программы. На компьютере установлена программа которая общается с весами. Мне нужно было получит значение которое она выдает (дальше не буду рассказывать что я с ними делаю поскольку не интересно). По началу не до конца понимая как мне это получить думал пойти простым путем но он оказался вовсе не простой. Поэтому решил пойти по WinAPI, хендл и т.д. В результате я сделал то что хотел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.01.2020, 17:56
Помогаю со студенческими работами здесь

Потоки, работа с памятью
Добрый день. Есть проект, в нем очень часты операции с памятью. Что бы не пересекались указатели на области памяти или что бы не...

Работа с памятью чужого процесса
Здраствуйте. Я в delphi еще новичек, и меня интересует такой вопрос: я думаю вы знаете что есть такая GTA:SA и SAMP. Так вот, в самп при...

Нужна книга, где рассматриваются работа с прерываниями, указатели, работа с памятью, ассемблерные вставки
Привет всем! Подскажите, пожалуйста, хорошую книгу по C (именно C, не C++). Интересует работа с прерываниями, указатели, работа с памятью,...

Управление памятью другой программы
Добрый день. Необходим постоянно устанавливать значение переменной в другой запущенной программе в 0. Ну это понятно, что значение надо...

Работа с памятью
Всем доброго времени суток. Почитав данный форум и проч. пришёл к выводу, что мой проект на C# нереален в виду бестолковой работы с...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru