Estoy tratando de escribir un script que lea una posición específica de memoria, utilizada por un programa (en este caso "Vsk5.exe").
El que la posición sea específicamente esa lo se porque la encuentro con Cheat Engine. La cuestión de los pointers y demás lo dejo para más adelante. El problema ahora es saber como acceder a la memoria utilizada por el programa, aunque sea solo por una vez.
El script es
Code: Select all
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)
DllCall("ReadProcessMemory", "UInt", ProcessHandle, "Ptr", MADDRESS, "Ptr", &MVALUE, "Uint",4)
return, result
DllCall("CloseHandle", "UInt", ProcessHandle)
}
address:=F27CF24
value := ReadMemory(%address%, "Vsk5.exe")
MsgBox Value is %value%
Aquí la dirección utilizada en el ReadMemory es la suma de la conocida más la dirección base del programa, es decir 1914 + 0F27B610.
Cheat Engine, en el momento de la localización de la dirección 0F27B610, me muestra arriba que estoy trabajando con el programa "00001940-Vsk5.exe".
Ya digo que el problema de que la dirección sea dinámica ya lo resolveré luego y se que tengo que cambiar la dirección tantas veces como cambie en el programa.
¿Que estoy haciendo mal? (o rematadamente mal)
Muchas gracias.