PDA

Просмотр полной версии : Что запихнуть в L2ParamStack для RequetUseItem


fastx
14.11.2016, 19:53
Здравствуйте)) Случайным образом нашел вот этот (http://coderx.ru/archive/index.php/t-8241.html) тред(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, реально лишь после установки хука на функцию, которая его принимает как параметр?

Smwr
14.11.2016, 20:10
push 1831 ;;;;;;;(oid антидота (Antidote))1 параметр


Это id итема, а нужен именно objectid (не надо путать).

второй параметр это юз через ctrl.

Или другой, не менее хороший вопрос: узнать, что есть в l2paramstack, реально лишь после установки хука на функцию, которая его принимает как параметр?
разумеется.

fastx
14.11.2016, 20:20
push 1831 ;;;;;;;(oid антидота (Antidote))1 параметр


Это id итема, а нужен именно objectid (не надо путать).


разумеется.
Спасибо, добрый человек. Буду пробовать с oid, а не с id.

ScythLab
14.11.2016, 23:18
Или другой, не менее хороший вопрос: узнать, что есть в l2paramstack, реально лишь после установки хука на функцию, которая его принимает как параметр?
разумеется.В коде engine.dll встречал перебор ПарамСтека, грубо говоря вытаскиваешь все с помощью Top, потом запихиваешь обратно, это первый вариант.
Второй вариант: лезть в память созданного объекта, там скорей всего примитивный динамический массив.

Smwr
15.11.2016, 00:40
Кстати да, очень похоже что он выглядит как

class L2ParamStack {
FArray Items;
int Current;
};

А в методах у него еще есть Restart(), который этот индекс сбрасывает в ноль.
Кстати, это не стек, а скорее очередь (меня в начале это неслабо смутило).

ScythLab
15.11.2016, 08:33
Мне тоже показалось, что это очередь, т.к. перебор был реализован чередующимися Top и Push, но думал, что я просто что-то перепутал и не обращал на это внимания.

fastx
15.11.2016, 15:59
Кстати да, очень похоже что он выглядит как

class L2ParamStack {
FArray Items;
int Current;
};

А в методах у него еще есть Restart(), который этот индекс сбрасывает в ноль.
Кстати, это не стек, а скорее очередь (меня в начале это неслабо смутило).

Мне тоже показалось, что это очередь, т.к. перебор был реализован чередующимися Top и Push, но думал, что я просто что-то перепутал и не обращал на это внимания.
Явно использованы принципы очереди: новое в конец; первое долой.
Всем спасибо, все работает прекрасно. Буду дальше делать что-то интересное, а по-совместительству задавать много глупых вопросов =))