Показать сообщение отдельно
Старый 21.04.2011, 09:16   #20
Пользователь
 
Аватар для ALF
 
Регистрация: 18.09.2010
Адрес: Киев
Сообщений: 70
Сказал Спасибо: 9
Имеет 10 спасибок в 6 сообщенях
ALF пока неопределено
По умолчанию

Код:
	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
__________________
Все относительно...

Последний раз редактировалось ALF, 21.04.2011 в 09:24. Причина: Добавлено сообщение
ALF вне форума   Ответить с цитированием