Здравствуйте, гость ( Вход | Регистрация )

> Lua - Process Start Address
Drakono
сообщение 28.10.2023, 21:06
Сообщение #1


*

Registred
Сообщений: 8
Регистрация: 8.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.147
Возраст: 25



Hi.

Does anybody know how to check start address of dynamically allocated memory for the process?

Want to automate my script by loading the start address on it's own.
Currently I'm launching Cheat Engine every time to check process start address.


Эскизы прикрепленных изображений
Прикрепленное изображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
Drakono
сообщение 31.10.2023, 22:36
Сообщение #2


*

Registred
Сообщений: 8
Регистрация: 8.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.147
Возраст: 25



My bad. I meant start address of the executable so that my pointers work inside script without checking it every time in CE. If what you said is exactly that then after reading your explanation I can sadly say that I do not know how to do it. Could you point me in correct direction?
Maybe some way to do this using ffi.C option which I currently use to read double values in memory.

Currently use this type of ffi code to read double. Maybe that could be reused?
Код

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);
    int GetModuleHandleA(const char *lpModuleName);
]]
function readDouble(address)
    if workwindow() == 0 then log('No Workwindow') return -1 end

    local PID, pointer_double = ffi.new('unsigned long[1]'), ffi.new('double[1]')
    user.GetWindowThreadProcessId(workwindow(), PID)
    local process = kernel.OpenProcess(PROCESS_VM_READ, true, PID[0])
    if process > 0 then
        kernel.ReadProcessMemory(process, address, pointer_double, 8, nil)
        kernel.CloseHandle(process);
        return tonumber(pointer_double[0])
    end
    --log('Proccess not open.')
    end_script () --
end

Sorry for the trouble I create.

Сообщение отредактировал DarkMaster - 1.11.2023, 5:51
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения



Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 8.7.2025, 1:14
Designed by Nickostyle