Код:
pop eax ; Выталкиваем со стека Адрес Возврата в EAX (4 байта)
push ebp ; Толкаем в стек Адрес , которого начинаются аргументы (глубина стека)
mov ebp, esp ; в ebp теперь "Вершина" стека. Туда будут идти аргументы
mov ebx,[ebp+4] ; тут 4 или 8? мы же вытолкали адрес возврата (4 байта)
pop ebp ; Выталкиваем то стека значения в регистр EBP.
mov NetPk, ebx ; в NetPk у нас будет указатель на пакет
pushad
; какието операции с пакетами типа stdcall
popad
push 0ffffffffh
push eax ; востанавливаем адрес возврата
ret
Проверьте)
Добавлено через 8 часов 34 минуты
Сейчас сделал вот так...
Код:
;=================================================================================
proc DispatchNetworkQueueHook
pop eax ; Выталкиваем со стека Адрес Возврата в EAX (4 байта)
push ebp ; Толкаем в стек Адрес , которого начинаются аргументы (глубина стека)
mov ebp, esp ; в ebp теперь "Вершина" стека. Туда будут идти аргументы
pushad
mov ebx,dword[ebp+08h] ; тут 4 или 8? мы же вытолкали адрес возврата (4 байта)
test ebx,ebx
jz skip
mov [pNetPk], ebx ; в NetPk у нас будет указатель на пакет
skip:
popad
push 0ffffffffh
push eax ; востанавливаем адрес возврата
ret
endp
Код:
mov eax, dword[pNetPk]
movzx eax, [eax+NetworkPacket.id]
Всё работает, по идеи в EAX должен быть ID пакета. Но у меня там его Размер почему то...)
Структура у меня такая
Код:
struct NetworkPacket
id db ?
pad1 db ?
exid db ?
pad2 db ?
_size dd ?
pad3 dd ?
pdata dd ?
ends