Что нового

[Процессы] Как средстваим autoit вычислить значение по адрессу в памяти?

alt-andrew

Новичок
Сообщения
19
Репутация
2
Суть в следующем-С помощью CheatEngine выяснил,что значение находится по адресу silver.dll+1D2C90.Как узнать начальный(базовый) адресс этой dll?
 
Автор
A

alt-andrew

Новичок
Сообщения
19
Репутация
2
Re: [Процессы] Как средстваим autoit вычислить начальный адресс .dll?

Вот нашел функцию которая возвращает адресс той самой dll+offset:
Код:
Func _MemoryModuleGetBaseAddress($iPID, $sModule)
    If Not ProcessExists($iPID) Then Return SetError(1, 0, 0)
    
    If Not IsString($sModule) Then Return SetError(2, 0, 0)
    
    Local   $PSAPI = DllOpen("psapi.dll")
    
    ;Get Process Handle
    Local   $hProcess
    Local   $PERMISSION = BitOR(0x0002, 0x0400, 0x0008, 0x0010, 0x0020) ; CREATE_THREAD, QUERY_INFORMATION, VM_OPERATION, VM_READ, VM_WRITE
    
    If $iPID > 0 Then
        Local $hProcess = DllCall("kernel32.dll", "ptr", "OpenProcess", "dword", $PERMISSION, "int", 0, "dword", $iPID)
        If $hProcess[0] Then
            $hProcess = $hProcess[0]
        EndIf
    EndIf
    
    ;EnumProcessModules
    Local   $Modules = DllStructCreate("ptr[1024]")
    Local   $aCall = DllCall($PSAPI, "int", "EnumProcessModules", "ptr", $hProcess, "ptr", DllStructGetPtr($Modules), "dword", DllStructGetSize($Modules), "dword*", 0)
    If $aCall[4] > 0 Then
        Local   $iModnum = $aCall[4] / 4
        Local   $aTemp
        For $i = 1 To $iModnum
            $aTemp =  DllCall($PSAPI, "dword", "GetModuleBaseNameW", "ptr", $hProcess, "ptr", Ptr(DllStructGetData($Modules, 1, $i)), "wstr", "", "dword", 260)
            If $aTemp[3] = $sModule Then
                DllClose($PSAPI)
                Return Ptr(DllStructGetData($Modules, 1, $i))
            EndIf
        Next
    EndIf
    
    DllClose($PSAPI)
    Return SetError(-1, 0, 0)
    
EndFunc
Вот теперь возникает такой вопрос-Как сделать чтоб она возвращала значение по найденному адрессу?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Если ты уже имеешь фактический адрес где расположено нужное значение то пользуй NomadMemory
 

xamd

AION bot developer
Сообщения
66
Репутация
24
Я решал подобную задачу для AION.
Можешь посмотреть здесь: http://autoit-script.ru/index.php?topic=1600.0

Для начала надо подключить библиотеку
Код:
#include <MemoryModuleGetBaseAddress.au3>


Прикрепил мою библиотеку(она чуть-чуть редактирована)
 
Автор
A

alt-andrew

Новичок
Сообщения
19
Репутация
2
Belfigor сказал(а):
Если ты уже имеешь фактический адрес где расположено нужное значение то пользуй NomadMemory
Где можно про NomadMemory посмотреть информацию?
 

Belfigor

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