Здравствуйте, у меня проблема: любая попытка считывания памяти через readmem, что луа, что стандартным возвращает значение -1. Помогите, пожалуйста, кто знает в чём может быть проблема.
Вверх
--lua
local x = readmem (0x100BEA34, 'b')
log (x)
readmem $x 0x100BEA34 F
log $x
end_script
--lua
local ffi = require('ffi')
local kernel = ffi.load('Kernel32.dll')
ffi.cdef[[
void RtlMoveMemory(void *Destination, const void *Source, int Length);
]]
function to_float(byte0, byte1, byte2, byte3)
local pointer_float = ffi.new('float[1]')
kernel.RtlMoveMemory(pointer_float, ffi.new('char[4]', {byte0, byte1, byte2, byte3}), 4)
return tonumber(pointer_float[0])
end
log 'clear' log 'mode compact'
local x = to_float(54, 5, 16, 72) -- массив байт перевести во float
log(x)
readmem $x 0x01C72AF4 D game.exe
readmem $x 0x01C72AF4 D game.exe
--lua
local PROCESS_VM_READ = 0x0010
local ffi = require("ffi")
local user, kernel = ffi.load('User32'), ffi.load('Kernel32')
ffi.cdef[[
int OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
int GetWindowThreadProcessId(int hWnd, int *lpdwProcessId);
bool CloseHandle(int hObject);
bool ReadProcessMemory(int hProcess, int lpBaseAddress, void *lpBuffer, int nSize, int *lpNumberOfBytesRead);
]]
function readmemory(address)
if workwindow() == 0 then log('Не указано рабочее окно') return -1 end
local PID, pointer_float = ffi.new('unsigned long[1]'), ffi.new('float[1]')
user.GetWindowThreadProcessId(workwindow(), PID)
local process = kernel.OpenProcess(PROCESS_VM_READ, true, PID[0])
if process > 0 then
kernel.ReadProcessMemory(process, address, pointer_float, 4, nil)
kernel.CloseHandle(process);
return tonumber(pointer_float[0])
end
log('Процесс не открылся') return -2
end
-- всё что выше в начало скрипта
log 'clear' log 'mode compact'
local x = readmemory(0x001756C4) -- прочитать значение типа float с указанного адреса
log(x)