26

Re: AHK: Алгоритм поиска адресов в памяти процесса

YMP пишет:

Если память под структуру выделяется динамически, то не удивительно, что адреса разные.

А можно как-то определить как она выделяется?

27

Re: AHK: Алгоритм поиска адресов в памяти процесса

Статическая память — это секции данных экзешника. По идее можно определить, где они находятся, когда приложение запущено. По заголовку файла программы можно это, в принципе, вычислить, там должны быть указаны их смещения и размеры. Эта память выделяется приложению при его загрузке. Если структура не в ней, то, значит, память для неё выделяется уже потом, по запросу. Из кучи процесса или из отдельно созданной кучи.

Адрес динамически выделенного блока может храниться в статической переменной, или в динамической структуре, массиве и т.п., чей адрес опять же может быть в статической памяти, тогда можно найти какую-то постоянную отправную точку. Но если он хранится в локальной переменной какой-то функции? Тогда уже не получится, потому что под локальные переменные выделяется место в стеке каждый раз при запуске функции, т.е. это не какой-то постоянный адрес.

28 (изменено: Malcev, 2018-07-08 23:03:11)

Re: AHK: Алгоритм поиска адресов в памяти процесса

Ну а как из всего этого следует, что на одном компьютере указатели на структуры и оффсеты не меняются и на другом компьютере они тоже не меняются, но имеют абсолютно другие значения?
Это зависит от количества оперативной памяти?

29 (изменено: svoboden, 2018-07-08 23:41:36)

Re: AHK: Алгоритм поиска адресов в памяти процесса

Так это вам уже нужно на С++ переходить. Это задача явно не для ahk.
Могу показать пример, как писать в память калькулятора. На ютубе полно таких примеров.

30 (изменено: Malcev, 2018-07-08 23:25:01)

Re: AHK: Алгоритм поиска адресов в памяти процесса

С задачей благодаря cheat engine, memory class by RHCP  и ликбезом от KusochekDobra я уже справился.
Хочется прояснить ситуацию, почему на разных компьютерах у некоторых приложений (например у калькулятора) отличаются указатели на структуры и оффсеты.

svoboden пишет:

Могу показать пример, как записывать в память калькулятора.

Так это можно сделать на AHK с помощью memory class by RHCP.

31

Re: AHK: Алгоритм поиска адресов в памяти процесса

Malcev пишет:

Так это можно сделать на AHK с помощью memory class by RHCP.

А memory class разве не читает только память.

32

Re: AHK: Алгоритм поиска адресов в памяти процесса

svoboden, это Вы утверждаете основываясь на личном опыте программирования на C++ в этой же технологической сфере, или на опыте AHK, в ней же, где все ваши попытки увенчались провалом?

Большой простор для манёвра описывают Виндовые АПИ, которые, в случае с AHK используются средствами DLLCall() и, которые на плюсах, Вы бы использовали добавляя в сборку их пространства имён. Так что по большей части, весь заморочь лишь в понимании как логически связать эти инструменты с поставленной задачей, для чего синтаксис AHK подходит более чем отлично.

Что касается калькулятора, то если не ошибаюсь, встречался со мнением, что писанные на Delphi(не точно, но точно, что те, что не на C++, C#) программы особо доставляют читерам, из-за каких-то особенностей языка. Вряд ли конечно, что Виндовый компонент изготовлен таким способом(не на C++, C#), но вероятность такая имеется. Так что если этот интерес только в целях самообучения, то его можно отложить на "потом".

Как раз таки в борьбе с DMA и используются указатели, которые активно эксплуатируют юзеры CE. Это способ самой программы, понимать, откуда ей тянуть данные.

33 (изменено: svoboden, 2018-07-09 00:25:57)

Re: AHK: Алгоритм поиска адресов в памяти процесса

KusochekDobra пишет:

где все ваши попытки увенчались провалом?

Чего провалом, у меня все получилось в ahk. И прочитать память, и много чего еще, но мне нужно писать в память процесса, а в ahk такой информации мало или вовсе нет.. Или покажите пример, как можно писать в память калькулятора в ahk (думаю, это будет неоправданно сложно сделать). В С++ есть такая возможность.

34

Re: AHK: Алгоритм поиска адресов в памяти процесса

Не лучший способ предлагать решения не относящиеся к предмету разговора, основываясь только на своём, плохом понимании самого предмета.

Ознакомьтесь пожалуйста вначале с первоисточником, чтобы понимать о чём речь и составлять свои предложения по существу дискуссии.

35

Re: AHK: Алгоритм поиска адресов в памяти процесса

svoboden пишет:

А memory class разве не читает только память.

А вы читали методы этой библиотеки, наверное нет.

Commonly used methods:
        read()
        readString()
        readRaw()
        write()
        writeString()
        writeRaw()

36 (изменено: Malcev, 2018-07-09 05:03:38)

Re: AHK: Алгоритм поиска адресов в памяти процесса

Вот что отвечает автор Cheat Engine по поводу pointerpath на оффоруме:

Perhaps your pointerpath went through something not meant to be used as a pointer. E.g your username which accidentally pointed to the right memory location, or your screen size, or the windows version number, etc...
That is why it's recommended to do a rescan on other systems with different windows versions as well.

https://www.cheatengine.org/forum/viewt … p?t=579358

37

Re: AHK: Алгоритм поиска адресов в памяти процесса

Malcev пишет:

Ну а как из всего этого следует, что на одном компьютере указатели на структуры и оффсеты не меняются и на другом компьютере они тоже не меняются, но имеют абсолютно другие значения?
Это зависит от количества оперативной памяти?

Может, версии калькулятора разные? И что значит абсолютно другие значения? От количества оперативки не должно зависеть вроде бы, ведь программы оперируют виртуальными адресами.

38

Re: AHK: Алгоритм поиска адресов в памяти процесса

Версии калькуляторов одинаковые - 6.1.7600.16385.
На одном из компьютеров после запуска калькулятора вычисляется его базовый адрес и с помощью неменяющегося указателя на структуру + оффсетов получаем нужное значение.
На другом же компьютере этот указатель на структуру + оффсеты уже не выдают нам нужного значения.
Хотя с блокнотом такие манипуляции проходят на всех компьютерах.

39

Re: AHK: Алгоритм поиска адресов в памяти процесса

А размеры экзешников тоже одинаковые? Также можно сравнить файлы побайтно командой


fc /b file1.exe file2.exe

Или тупо заменить один на другой и посмотреть, что это даст.

40

Re: AHK: Алгоритм поиска адресов в памяти процесса

Размеры почему-то разные, но у блокнота тоже размеры разные, но с ним работает.

41

Re: AHK: Алгоритм поиска адресов в памяти процесса

Ну, возможно, у Блокнота они разные за счёт чего-то такого, что не влияет на расположение нужной вам переменной в секции данных. Например, разница где-то дальше неё. А с Калькулятором повезло меньше.

42

Re: AHK: Алгоритм поиска адресов в памяти процесса

Malcev пишет:

Версии калькуляторов одинаковые - 6.1.7600.16385.

Я плохо посмотрел - версии разные, поэтому всё стало на свои места.
Спасибо!