Всем привет... Помогите пожалуйста Надо написать функцию. По типу DispatchNetworkQueue(struct NetworkPacket * *) Структура NetworkPacket вот такая Код (Text): struct NetworkPacket id db ? pad1 db ? exid db ? pad2 db ? _size dd ? pad3 db ? pdata dd ? ends Пытался сделать Код (Text): proc DispatchNetworkQueue np:NetworkPacket ; какие то действия с np ret endp но не компилируется... Очень надеюсь на Вашу помошь
r2max вам надо описывать параметр как адрес на структуру грузить его в регистр для адресации и работать (strucname PTR [reg]).struc_field
Звёздочка обозначает операцию взятия адреса. Т.к. звёздочки две, то в функцию передаётся указатель на указатель на структуру. На MASM это должно выглядеть примерно так: Код (Text): proc DispatchNetworkQueue uses ebx ppnp:DWORD mov ebx, [ppnp] ; NetworkPacket ** mov ebx, [ebx] ; NetworkPacket * mov al, [ebx+NetrowkPacket.id] mov cl, [ebx+NetworkPacket.exid] mov edx, [ebx+NetworkPacked._size] ... endp
Смотрите я делаю хук функции UNetworkHandler:ispatchNetworkQueue(struct NetworkPacket * *) (оригинала) методом сплайсинга. В начале функции у меня идет call на мою. Вот как выглядит сам хук Код (Text): proc DispatchNetworkQueueHook pop eax ; Выталкиваем со стека Адрес Возврата в EAX (4 байта) push ebp ; Толкаем в стек Адрес , которого начинаются аргументы (глубина стека) mov ebp, esp ; в ebp теперь "Вершина" стека. Туда будут идти аргументы pushad mov edx, [ebp+8] ; ebp+8 = первый аргумент test edx,edx jz ff stdcall PaketDump,[edx] ff: popad push 0ffffffffh push eax ; востанавливаем адрес возврата ret endp Код (Text): proc PaketDump uses ebx, ppnp:DWORD mov eax, [ppnp] ; NetworkPacket ** mov ebx, [eax] ; NetworkPacket * movzx eax, [eax+NetworkPacket.id] mov ebx, 16 mov edi, MAXHPBuff call IntToStr ret В общем суть - перехватить пакет. Точнее его Id и вызвать IntToStr (в eax - число)