Здравствуйте. Прошу помочь разобраться в том, как находятся смещения для обьектов, при хуке нативных функций. Например:
local integer ConvertedHandle = ConvertHandle(handle)
local integer ReadedRealMem = ReadRealMemory( ConvertedHandle )
Далее, если передать значение переменной ReadedRealMem, например в CallCdeclWith5Args, в качестве аргумента к нативной функции, которая принимает обьект как void, происходит фатал. Это единственное, что вызывает у меня на данный момент трудности. Дополню, что если использовать вместо выше указанных переменных просто GetHandleId(handle), то хук работает замечательно, но к определенному типу обьекта, например если это SetUnitTimeScale(), и если передать в нее эффект, разрушаемый, и юнита, изменения применяться только к юниту, остальные в игноре, почему так происходит? И где можно об этом более детально почитать?
local integer ConvertedHandle = ConvertHandle(handle)
local integer ReadedRealMem = ReadRealMemory( ConvertedHandle )
Далее, если передать значение переменной ReadedRealMem, например в CallCdeclWith5Args, в качестве аргумента к нативной функции, которая принимает обьект как void, происходит фатал. Это единственное, что вызывает у меня на данный момент трудности. Дополню, что если использовать вместо выше указанных переменных просто GetHandleId(handle), то хук работает замечательно, но к определенному типу обьекта, например если это SetUnitTimeScale(), и если передать в нее эффект, разрушаемый, и юнита, изменения применяться только к юниту, остальные в игноре, почему так происходит? И где можно об этом более детально почитать?
Принятый ответ
Ну сперва ты конвертируешь хендл в адресс, после ты задаёшь от адреса отступ, чтобы попасть в нужную ячейку структуры объекта, как до неё добраться нужно смотреть в чит енджине или дезасамблировать игру и вникать в логику работы интересующих тебя вещей.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
потому что нужно понимать, что void означает пустой аргумент, ака ThisCall1Args(0) , где 0 =- просто потому что вызова без аргументов не предусмотрено в мх
без желания разбираться в этом можно и не начинать, я там года полтора бродил вслепую
Если DracoL1ch, поможет, мб будет больше функций.
Как я уже написал, мне не до конца понятен конверт обьектов в целочисленные, а затем добавление к им смещения, а вернее, где их искать, как пример - вот эти hex значения 0x1F0 и 0xCC в данной функции:
function GetHeroPrimaryAttribute takes unit u returns integer
local integer a = ConvertHandle( u )
if a > 0 then
set a = ReadMemory( a + 0x1F0 )
if a > 0 then
return ReadMemory( a + 0xCC )
endif
endif
return 0
endfunction