1 (изменено: tuma4ok, 2014-07-17 18:02:08)

Тема: Работа с памятью процесса

Здравствуйте. Я нашёл одну интересную функцию.

WriteProcessMemory(title,addresse,wert,size)  
{ 
VarSetCapacity(idvar,32,0) 
VarSetCapacity(processhandle,32,0) 
VarSetCapacity(value, 32, 0) 
NumPut(wert,value,0,Uint) 
address=%addresse% 
WinGet ,idvar,PID,%title% 
processhandle:=DllCall("OpenProcess","Uint",0x38,"int",0,"int",idvar) 
Bvar:=DllCall("WriteProcessMemory","Uint",processhandle,"Uint",address+0,"Uint",&value,"Uint",size,"Uint",0) 
} 

Она переписывает значение в памяти игры. А как можно переделать это что бы я мог получить в переменную текущее значение нужного мне адреса.
Вот я нашёл вот это, но не знаю как с ним работать.

ReadMemory(MADDRESS,PROGRAM) 
{ 
       winget, pid, PID, %PROGRAM% 

       VarSetCapacity(MVALUE,4,0) 
       ProcessHandle := DllCall("OpenProcess", "Int", 24, "Char", 0, "UInt", pid, "UInt") 
       DllCall("ReadProcessMemory","UInt",ProcessHandle,"UInt",MADDRESS,"Str",MVALUE,"UInt",4,"UInt *",0) 

       Loop 4 
       result += *(&MVALUE + A_Index-1) << 8*(A_Index-1) 

       return, result 
} 

ReadMemoryFloat(MADDRESS=0,PROGRAM="") 
{ 
    Static OLDPROC, ProcessHandle 
    VarSetCapacity(MVALUE,4,0) 
    If PROGRAM != %OLDPROC% 
    { 
       WinGet, pid, pid, % OLDPROC := PROGRAM 
       ProcessHandle := ( ProcessHandle ? 0*(closed:=DllCall("CloseHandle" 
       ,"UInt",ProcessHandle)) : 0 )+(pid ? DllCall("OpenProcess" 
       ,"Int",2035711,"Int",0,"UInt",pid) : 0) 
    } 
    If (ProcessHandle) && DllCall("ReadProcessMemory","UInt" 
    ,ProcessHandle,"UInt",MADDRESS,"Str",MVALUE,"UInt",4,"UInt *",0) 
    { 
       MVALUE := *(&MVALUE+3)<<24 | *(&MVALUE+2)<<16 | *(&MVALUE+1)<<8 | *(&MVALUE) 
       return (1-2*(MVALUE>>31)) * (2**((MVALUE>>23 & 255)-127)) * (1+(MVALUE & 8388607)/8388608) 
    } 
    return !ProcessHandle ? "Handle Closed: " closed : "Fail" 
} 

Объясните что да как. Имя процесса  "GTA:SA:MP", адрес "0xB7CE50".

2

Re: Работа с памятью процесса

tuma4ok пишет:

Удалите тему в разделе "AHK Games", перепутал разделы просто. Виноват.

tuma4ok пишет:

Она переписывает значение в памяти игры.

По-моему, в той ветке самое место, нет?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

3

Re: Работа с памятью процесса

teadrinker пишет:
tuma4ok пишет:

Удалите тему в разделе "AHK Games", перепутал разделы просто. Виноват.

tuma4ok пишет:

Она переписывает значение в памяти игры.

По-моему, в той ветке самое место, нет?

Нет, тут самое место, просто не важно из игры или нет, может из программы. По этому лучше тут. А было бы лучше если бы вы помогли бы мне ещё.

4

Re: Работа с памятью процесса

Никакой путаницы нет. Я перекинул тему в раздел "AutoHotKey — Games", поскольку в ней речь идёт о конкретной игре.

Если интересует вопрос вообще - пожалуйста, уже существуют темы:
AHK: Доступ к памяти других процессов
AHK: Float значение. чтение из памяти
AHK: Карта памяти.

Достаточно провести поиск в разделах AutoHotkey по слову "память".

5

Re: Работа с памятью процесса

tuma4ok пишет:

Вот я нашёл вот это, но не знаю как с ним работать.

ReadMemory(MADDRESS,PROGRAM) 

Не знаете, как вызвать функцию? Или что? Первый параметр — адрес, второй — имя процесса, видимо.

6

Re: Работа с памятью процесса

tuma4okhttp://forum.script-coding.com/misc.php … mp;preview

7 (изменено: qqlexa, 2018-08-02 01:10:25)

Re: Работа с памятью процесса

slavik26092001, было бы отлично увидеть русскую версию комментариев. Я сам из Украины, но комментарий рода - "Наш адрис знайдено", испугал меня.