Что нового

Есть ли библиотеки по работе с оперативной памятью?

  • Автор темы VitAl2013
  • Дата начала
V

VitAl2013

Гость
Так как программа не хочет выдавать параметр я хочу отыскать его адрес и считывать напрямую из оперативной памяти. Есть ли какие-то библиотеки по этому поводу.

Нашёл в глубинах интернета упоминание NomadMemory.au3 от Zevorc. Но то было для AutoIT 2.20 и она сейчас не поддерживается.

Есть ли что-то ещё?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
r35p3ct [?]
Может это подойдет...
И зачем было выкладывать стандартный include? Он идёт вместе с AutoIt.

Код:
#include <Memory.au3>
 
Автор
V

VitAl2013

Гость
Угу... вроде есть такая, только о ней ни слова в хелпах и примеров нет. Я так и не понял какой функцией считать блок (адрес) памяти который я нашёл через ArtMoney или аналог. Там термины какие-то в описании, помимо того что на нерусском. С моим уровнем английского... точнее с моим уровнем знания терминов я в ней мало что понял. Прошу показать пример считывания хотя бы.
 
Автор
V

VitAl2013

Гость
И так, то что мне удалось узнать. Каждый процесс получает блок памяти и каждый кусочик памяти имеет по сути два адреса: общий и внутренний. Разница между ними в системе отсчёта. Общий это когда ноль находится в ноле физической оперативной памяти (или около неё). Внутренний - это когда ноль находится в начале блока памяти выделенного процессу (или взятого им... во всяком случае используемом именно этим процессом) Для того чтобы правильно считать необходимый блок памяти надо сначало найти внутренний ноль. То начало блока памяти индивидуального процесса. Иначе с общим адресом на одной машине этот будет один адрес, на другой - другой; или даже на одной машине, но с разным набором процессов.

Теперь то что я понял исходя из этого в библиотеке Memory.au3 на вроде подходящую по смыслу функцию _MemRead():
Pointer to external memory = Внешний (общий) адрес.
Pointer to internal memory = Внутренний адрес
Size in bytes of memory to read/write = Размер в байтах считываемой/записавыемой памяти

tagMEMMAP structure - не понял

Смущает надпись: This function is used internally by Auto3Lib and should not normally be called = По идее эта функция только вспомогательная для других функций и в нормали не должна вызываться.

Вопросы:
1) Надо ли как-то предварительно обрабатывать память или можно просто считать напрямую?
2) Видел способ записи в виде 0х12345ABC... и просто 12345ABC... - Какая между ними разница и какой нам можно(нужно) применять в функциях?
3) Есть ли функция в такого типа: MemRead(имя процесса.ехе, внутренний адрес)?

OffTopic:
Для тех кому интересно - это я не игры ломаю, этоя пытаюсь узнать сколько страниц в документе у проги которая изначально интерфейсом из Линукс среды выросла (не могу считать напрямую из интерфейса)



Добавлено:
Сообщение автоматически объединено:

Нашёл, к стати, NomadMemory.au3 для 3ки :http://forum.ru-board.com/topic.cgi?forum=5&topic=29240&start=0&limit=1&m=9#1


Добавлено:
Сообщение автоматически объединено:

Получилось с NomadMemory! :laugh: :
Код:
#include "NomadMemory.au3"
$memory = _MemoryOpen (ProcessExists("process.exe"))
$pointer = 0x[адрес из прграммы типа "Cheat Engine"]
$result = _MemoryRead ($pointer, $memory)
MsgBox (0, "!", $result)



Добавлено:
Сообщение автоматически объединено:

Теперь проблема в том что адрес постоянно мигрирует, надо както его отлавливать. Есть ли логические умозаключения как?
 

SyDr

Сидра
Сообщения
651
Репутация
158
http://www.artmoney.ru/r_download.htm
Посмотри в справке пункт 9. Там описано использование и поиск указателей для взлома игр.
 
Автор
V

VitAl2013

Гость
Логику поримерно выстроил: надо привязаться к неизменяемым, постоянным и лучше уникальным значениям. Вычислить смещение между ними и потом читать по формуле НПУданные+смещение. Нашёл такие. И тут вопрос: как отыскать адрес по его значению? Только теперь уже силами AutoIT?

SyDr
сейчас почитаю
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
тоже интересна эта тема, но мне нужно сдампить всю память в файл.
сейчас буду качать ту UDF'ку, она читает память даже которая в файле подкачки?
как оно работает с нынешней бэтой?
странно лежит на сайте креатора, а с самого сайта нет упомянаний о ней.
 
Автор
V

VitAl2013

Гость
SyDr
Посмотри в справке пункт 9.
Там про выбор процесса. Выбор процесса в моём скрипте каждый раз автоматический... Мигрирует сам адрес внутри памяти выделенной под процесс.

Читаю 10ый. Там получается что адреса просто сдвигаются, но у меня он прыгает, при том может прыгать во время работы самой программы, не обязательно её выключать, надо только ещё открыть новый документ. Как говорил выше, есть постоянные значения в этом куске. Посоветуйте, как отловить их без использование (тем более ручного) вспомогательных программ.
 

SyDr

Сидра
Сообщения
651
Репутация
158
Извиняюсь. Не подумал скачать новую версию. В новой справке это пункт 10: Использование указателей и "Авто изменение адресов".
 
Автор
V

VitAl2013

Гость
Пока изменял уже появилось новое сообщение. :smile:

И так, есть два не понятных для меня термина: указатель и структура. Точнее не понятно откуда они берутся. С последним есть догадки - это целый блок памяти, содержащий сразу много адресов. А вот откуда берётся указатель, я не понял. Как его найти? Есть догадка, что как-то можно спросить систему "Какие указатели ведут к этому блоку памяти?" Я прав?
 
Автор
V

VitAl2013

Гость
Вопрос темы решён, но в процессе родились связанные нерешённые вопросы.
 
Верх