;---------------------------------------------------------------------------------------------------------------
#include <NomadMemory.au3>
;---------------------------------------------------------------------------------------------------------------
$sBaseAdres = 0x1E1D40 ;Базовый адрес
$sOffset1 = 0x4C ;Оффсет 1 (смещение)
$sProcess = "123.exe"
$iPID = ProcessExists($sProcess)
$sMemory = _MemoryOpen($iPID)
$sRBaseAdres = _MemoryModuleGetBaseAddress($iPID, '123.exe') ;получаем базовый адрес процесса
$sBaseA = "0x" & Hex($sRBaseAdres + $sBaseAdres) ;складываем со смещением к базовому адресу
$sPar1 = _MemoryRead($sBaseA, $sMemory) ;читаем содержимое базового адреса
$sPar2 = "0x" & Hex($sPar1 + $sOffset1) ;складываем со смещением 1
#include <NomadMemory.au3>
$WinHandle = "Last Chaos" ;- Имя окна
$pid = WinGetProcess($WinHandle)
$info = _MemoryOpen($pid)
$plus = 0x00788E58
$offset = "28" ;1й указатель. Для моей функции "_MemoryOffsetRead" нужно писать без "0x"
$base = _MemoryModuleGetBaseAddress($pid, "Engine.dll"); получаем адрес длл библиотеки
$base = $base + $plus ;- Получаем БА
$mem_read = _MemoryOffsetRead($base, $info, $offset) ;читаем содержимое адреса
MsgBox(0,"", $mem_read)
$offset = StringSplit("0+704+0+58", "+", 1)
#include <MemoryModuleGetBaseAddress.au3>
#include <NomadMemory.au3>
$PID = "Игра.exe"
$plusG = 0x001E18D
$mof1 = 0x0 ;1й указатель
$mof2 = 0x704 ;2й указатель
$mof3 = 0x0 ;3й указатель
$mof4 = 0x58 ;4й указатель
$baseGA = _MemoryModuleGetBaseAddress($PID, '123.exe'); получаем базовый адрес процесса
$baseG = "0x" & Hex($baseGA + $plusG); складываем со смещением к базовому адресу
$11 = _MemoryRead($baseG, $Mem) ;читаем содержимое базового адреса
$M11 = "0x" & Hex($1 + $mof1) ;складываем со смещением 1
$22 = _MemoryRead($M11, $Mem)
$m22 = "0x" & Hex($22 + $mof2)
$33 = _MemoryRead($m22, $Mem)
$m33 = "0x" & Hex($33 + $mof3)
$44 = _MemoryRead($m33, $Mem)
$m44 = "0x" & Hex($44 + $mof4)
$mapAd = _MemoryRead($m44, $Mem) ;Здесь должно быть твое значение
#include <NomadMemory.au3>
$mid = _MemoryOpen(ProcessExists("Game.exe"))
$offset0 = "0x" & hex(_MemoryRead(0x082AD1A0 + 0x41C, $mid))
$offset1 = "0x" & hex(_MemoryRead($offset0 + 0x4, $mid))
$offset2 = "0x" & hex(_MemoryRead($offset1 + 0x0, $mid))
$offset3 = "0x" & hex(_MemoryRead($offset2 + 0x40, $mid))
$offset4 = _MemoryRead($offset3 + 0x4, $mid)
_MemoryClose($mid)
MsgBox(1,"Test",$offset4)
#RequireAdmin ;User Account must have Administrator privlidges
#include <MemoryModuleGetBaseAddress.au3>
#include <NomadMemory.au3>
$plusG = 0x082AD1A0
$mof1 = 0x41c ;1й указатель
$mof2 = 0x4 ;2й указатель
$mof3 = 0x0 ;3й указатель
$mof4 = 0x40 ;3й указатель
$mof5 = 0x4 ;3й указатель
$baseGA = _MemoryModuleGetBaseAddress($PID, 'game.exe'); получаем базовый адрес процесса
$baseG = "0x" & Hex($baseGA + $plusG); складываем со смещением к базовому адресу
$11 = _MemoryRead($baseG, $Mem) ;читаем содержимое базового адреса
$M11 = "0x" & Hex($1 + $mof1) ;складываем со смещением 1
$22 = _MemoryRead($M11, $Mem)
$m22 = "0x" & Hex($22 + $mof2)
$33 = _MemoryRead($m22, $Mem)
$m33 = "0x" & Hex($33 + $mof3)
$44 = _MemoryRead($m33, $Mem)
$m44 = "0x" & Hex($44 + $mof4)
$55 = _MemoryRead($m44, $Mem)
$m55 = "0x" & Hex($55 + $mof5)
$mapAd = _MemoryRead($m55, $Mem) ;Это итог
MsgBox(48, "Результат", $mapAd)
$baseGA = _MemoryModuleGetBaseAddress($PID, 'game.exe'); получаем базовый адрес (ТУТ В ОРИГИНАЛЕ ИСПОЛЬЗУЕТСЯ ДОПОЛНИТЕЛЬНАЯ ДЛЛ, В МОЕМ СЛУЧАЕ ВСЕ В ОДНОМ EXE)
Local $_aPoints[ 5 ][ 6 ] = [ [ 0x400000, 5 ],
[ 'STATIC', -1, -1, -1, -1, 0xA258C4 ], _
[ 0x9FCDD8, 0x13A8, 0x4, 0x18, -1, 0x28 ], _
[ 'OFFSET', -1, -1, -1, -1, 0x78 ], _
[ 0x9FCDD8, 0x5FC, -1, -1, -1, 0x04 ] ]
;Local $_aPoints[ 5 ][ 6 ] = [ [ BASEADDRESS, LEVEL ],
;[ ADDRESSTYPE, OFFSET1, OFFSET2, OFFSET3, OFFSET4, FINALOFFSET ], _
ADDRESSTYPE: Тип адреса
STATIC - Статический адрес.
OFFSET - Как и STATIC, но для удобства именуется оффсетом(если это оффсет).
0x... - Статический адрес первого поинтера.
OFFSET1 - Оффсет следующего поинтера по отношению указателя в предыдущем.
OFFSETN - Оффсет следующего поинтера по отношению указателя в предыдущем.
FINALOFFSET -Оффсет адреса по отношению к указателю финального поинтера.
Func _Ilum_LoadMemoryTable( $_aPoints )
Local $_aPoints_Size = UBound($_aPoints) - 1, $_sBinary = 0
Local $aRet[ $_aPoints_Size ]
For $IdxRow = 1 To $_aPoints_Size Step 1
For $IdxCol = 0 To $_aPoints[0][1] Step 1
If Not $IdxCol Then
If $_aPoints[$IdxRow][0] <> 'OFFSET' Then
$_sBinary = $_aPoints[0][0]
If $_aPoints[$IdxRow][0] <> 'STATIC' Then
$_sBinary = _MemoryRead( $_sBinary + $_aPoints[$IdxRow][0] )
EndIf
Else
$_sBinary = 0x00
EndIf
ElseIf $IdxCol = $_aPoints[0][1] Then
$_sBinary = $_sBinary + $_aPoints[$IdxRow][$_aPoints[0][1]]
ElseIf $_aPoints[$IdxRow][$IdxCol] <> -1 Then
$_sBinary = _MemoryRead( $_sBinary + $_aPoints[$IdxRow][$IdxCol] )
EndIf
Next
$aRet[$IdxRow-1] = $_sBinary
Next
Return $aRet
EndFunc