Что нового

Узнать значение из оперативной памяти?

Suppir

Продвинутый
Сообщения
967
Репутация
62
Хочу в некой программе узнать величину переменной. С помощью бесплатной artmoney я определил, что переменная имеет тип "целое 4 байта" и расположена по адресу 1A0B04D8 и 1A16C280 (т.е. по двум адресам одно и то же значение).
Каким образом с помощью AutoIt можно определить значение переменной, расположенной по этим адресам?

Нашел UDF Memory Management, но там ни одного примера :(
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 598
Репутация
938
В играх я пользуюсь вот этим:



Код:
#include <nomadmemory.au3>

 $AllodsProcessName = "MMO A1"

$ProcessID = WinGetProcess($AllodsProcessName,"")
SetPrivilege("SeDebugPrivilege", 1)
If $ProcessID = -1 Then
	MsgBox(4096, "ERROR", "Failed to detect MMO A1 running.")
	Exit
EndIf


$DllInformation = _MemoryOpen($ProcessID)
		If @Error Then
			MsgBox(4096, "ERROR", "Failed to open memory.")
			Exit
		EndIf

Func  _CurrentEN()
	$CurrentEN = (_MemoryRead(0x08747DEC, $DllInformation, 'ptr'))
	If @Error Then
		MsgBox(4096, "ERROR", "Failed to read memory.")
		Exit
	EndIf
	Global $ENdec = dec(StringTrimLeft($CurrentEN, 2))
EndFunc

Func _CurrentHP()
	$CurrentHP = (_MemoryRead(0x08747DE8, $DllInformation, 'ptr'))
	If @Error Then
		MsgBox(4096, "ERROR", "Failed to read memory.")
		Exit
	EndIf
	Global $HPdec = dec(StringTrimLeft($CurrentHP, 2))
EndFunc
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Да, спасибо! Нашел эту библиотеку в старых темах.

Основная проблема в том, что искомое значение меняет свое местоположение :(
Т.е. при первом запуске программы находится по одному адресу, потом - по другому.



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

можно ли удалить тему?
 

cls

Новичок
Сообщения
6
Репутация
0
А как лучше всего искать нужный текст в памяти?

Есть процесс, в его памяти есть заранее известный текст, нужно найти смещение этого текста и прочитать килобайт после этого смещения. Как ЛУЧШЕ всего это реализовать с помощью автоита? На первый взгляд приходит на ум тупой перебор смещений. Есть что лучше?
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Suppir
Suppir сказал(а):
Т.е. при первом запуске программы находится по одному адресу, потом - по другому.
Suppir Для преодаления этой проблемы необходимо найти указатель на ту переменную в которой находится значение. Указатель постоянен. Так что необходимо сначало привязаться к этому указателю. Почитайте инструкцию из той же Artmoney про изменение значений с помощью указателей. И как его найти.

Я допустим делаю так

Код:
Func MemoryWrites5000() ; Функция изменяет кол-во денег в игре
$memory = _MemoryOpen (ProcessExists("game.exe")) ; Открываем память  процесса
$pointer = 0x001521A4							  ; Указатель вычесленный	с помощью Artmoney								  	
$data = 5000									  ; данные для изменения 	
$result = _MemoryRead($pointer, $memory)		  ; Читаем  память (переменную) в которой находятся значения по указателю	
$valueresult="0x" & hex($result)				  ; Преобразуем в hex - вид	
$resultat = _MemoryWrite($valueresult, $memory, $data) ; Вписываю нужное значение (5000) в переменную

Теперь после перезапуска игры на любых компьютерах значение будет постоянным.
Хотя не знаю как дело обстоит в х64 системах.

Другое дело , что иногда нелегко найти этот самый указатель...
Бывает такое что приходися искать указатель на указатель
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 598
Репутация
938
OffTopic:
Спустя 11 месяцев
 

VladUs

Скриптер
Сообщения
621
Репутация
181
OffTopic:
Да уж ... Вот так захочешь помочь человеку, его уже может и в живых нет... :suicide:
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
VladUs сказал(а):
Другое дело , что иногда нелегко найти этот самый указатель...
Бывает такое что приходися искать указатель на указатель
Так... для Warcraft3 все находится легко и просто. А вот для LOL(League of Legends) не получается (убил на поиски где-то сутки)... Не подскажешь алгоритм или просто дашь ссылку где можно почитать, как искать указатель на указатель? :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 598
Репутация
938
Это при том что на форуме не один гайд и описание лежит на эту тему
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Хм... по запросам "artmoney", "указатель на указатель" и т.д. ничего нужного не находится... Возможно это, как-то по другому называется?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 598
Репутация
938
это называется работа с оффсетами
 
Верх