Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ UO Pilot в онлайн играх _ Чтение памяти из х64 процессов

Автор: Aqualon 30.3.2024, 22:29

Понадобилось. Нативные методы пилота для такого очевидно не работают, хотел узнать, возможно, у кого-то уже были кейсы.
Пока нашёл вот такую либу, думаю начать копать в этом направлении https://github.com/rwfpl/rewolf-wow64ext
В целом буду рад любым подсказкам)
Ну и хочу понять, туда ли я вообще взялся копать.

Автор: Aqualon 31.3.2024, 14:23

Нашёл вот такое.

Цитата

2.36
Добавил в команды 'readmem' и 'writemem' работу с 64 битными процессами. Новый тип данных L:long = 8b;
Добавил модульную адресацию в командах работы с памятью.

readmem <variable> <adress> <type> <size> [modulename]
writemem <variable> <adress> <type> [ModuleName] [result]


Но при попытке запустить вот такой код получаю соответственную ошибку
Код

local address = 0xFFF656770000
readmem (address, 'L')

Цитата

Lua error.
'1.406960093579e+014' is not a valid integer valueL

Автор: Aqualon 5.4.2024, 1:31

Если кому интересно, разобрался.
Собственно по базовому адресу из х64 процессов пилот считать отказывается, но если читать первый офсет от названия модуля то всё ок.
Получается вот такая конструкция работает.

Код

local function getValueFromOffsetsx64(moduleName, offsets, type, handle)
    type = type or 'd'
    if handle then workwindow(handle) end
    local base = readmem(offsets[1], 'l', moduleName)
    local lastAddress = base
    for i = 2, #offsets - 1
        lastAddress = readmem(lastAddress + offsets[i], 'l')
    end

    local value = readmem(lastAddress + offsets[#offsets], type)
    return value
end

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)