Здравствуйте)) Случайным образом нашел вот этот тред(2 сообщение). Там проиллюстрирован пример заполнения парам стека для вызова ReqUseItem. Но на самом же деле ничего не юзается если заполнять стек так. Вот конкретно мой код:
Код:
local l2Stack[16]:BYTE
lea esi, [l2Stack]
push 10
mov ecx, esi
call [pAddr_l2ps_create]
mov ecx, esi
call [pAddr_l2ps_clear]
push 1831 ;;;;;;;(oid антидота (Antidote))1 параметр
mov ecx, esi
call [pAddr_l2ps_pushback]
push 0 ;;;;;;;(вроде ник на ком юзать(хз(0 - на себя))) 2 параметр
mov ecx, esi
call [pAddr_l2ps_pushback]
push esi
mov ecx, [unh] ;;;;;железобетонно-верный указатель на unh
call [pAddr_unh_requseitem] ;;;;;вызывается, но реакции 0(критом не выбивает)
Так как же правильно набить этого ублюдка? Или другой, не менее хороший вопрос: узнать, что есть в l2paramstack, реально лишь после установки хука на функцию, которая его принимает как параметр?
Это id итема, а нужен именно objectid (не надо путать).
второй параметр это юз через ctrl.
Цитата:
Или другой, не менее хороший вопрос: узнать, что есть в l2paramstack, реально лишь после установки хука на функцию, которая его принимает как параметр?
разумеется.
Последний раз редактировалось Smwr, 14.11.2016 в 20:17.
Или другой, не менее хороший вопрос: узнать, что есть в l2paramstack, реально лишь после установки хука на функцию, которая его принимает как параметр?
разумеется.
В коде engine.dll встречал перебор ПарамСтека, грубо говоря вытаскиваешь все с помощью Top, потом запихиваешь обратно, это первый вариант.
Второй вариант: лезть в память созданного объекта, там скорей всего примитивный динамический массив.
class L2ParamStack {
FArray Items;
int Current;
};
А в методах у него еще есть Restart(), который этот индекс сбрасывает в ноль.
Кстати, это не стек, а скорее очередь (меня в начале это неслабо смутило).
Мне тоже показалось, что это очередь, т.к. перебор был реализован чередующимися Top и Push, но думал, что я просто что-то перепутал и не обращал на это внимания.
class L2ParamStack {
FArray Items;
int Current;
};
А в методах у него еще есть Restart(), который этот индекс сбрасывает в ноль.
Кстати, это не стек, а скорее очередь (меня в начале это неслабо смутило).
Цитата:
Сообщение от ScythLab
Мне тоже показалось, что это очередь, т.к. перебор был реализован чередующимися Top и Push, но думал, что я просто что-то перепутал и не обращал на это внимания.
Явно использованы принципы очереди: новое в конец; первое долой.
Всем спасибо, все работает прекрасно. Буду дальше делать что-то интересное, а по-совместительству задавать много глупых вопросов =))