Проблема следующая: в Си строки выгледят так: IPPacket *ipp; ipp=(IPPacket *)PacketHeader; как их перевести на ассемблер т.е. как они будут выгледить там. А то необходимо произвести разбор пакета после получения и обязательно на ассемблере.
afybc mov eax, [PacketHeader] mov [ipp], eax Скорее так будет более правильно. Ведь PacketHeader - это какой-то указатель, и нам нужно этот указатель занести в ipp.
Ну так то да =) Просто я подразумевал ipp dd ? PacketHeader some_struct ? . . . mov [ipp], PacketHeader
ipp=(IPPacket *)PacketHeader; Вообще это называется приведение к типу... Сорри - проглядел, что ipp - указатель.
А в чём вопрос ? В том как одной переменной - указателю (dword на x32) присвоить значение другой - указателя (аналогичной ) ? Тогда ответы выше + как вариант: push [PacketHeader] pop [ipp] А если в том как зделать "разбор" 1 структура должна быть оформлена 2 обращение к полям примерно так : [reg + IPPacket.поле]
Так как у меня не заработали предложенные варианты, то опишу более подробно проблему. Я пишу программу выполняющую функции Firewall. Воспользовавшись статьей “Способы фильтрации сетевого трафика в Windows 9x/2000/Net.2003 Server” я написал фильтр, но он удаляет или пропускает все пакеты. При отправки или получения пакета вызывается следующая функция: hookproc proc PacketHeaderWORD, PacketWORD, PacketLength:WORD, RecvInterfaceIndex:WORD,SendInterfaceIndex:WORD,RecvLinkNextHopWORD, SendLinkNextHopWORD mov eax,PF_DROP ret hookproc endp где, как написано в DDK PacketHeader является указателем на структуру IPHeader в которой описаны поля пакета к примеру время жизни пакета. Прочитав ваши ответы я делаю следующее: в данных пишу ipp IPHeader <>. Функцию изменяю до следующего: hookproc proc PacketHeaderWORD, PacketWORD, PacketLength:WORD, RecvInterfaceIndex:WORD,SendInterfaceIndex:WORD,RecvLinkNextHopWORD, SendLinkNextHopWORD mov eax,[PacketHeader] mov [ipp],eax mov eax,PF_DROP ret hookproc endp И при компиляции возникает ошибка в mov [ipp],eax. error A2022: instruction operands must be the same size. Напишите пожалуйста как это исправить. Отвечайте более подробно. Пожалуйста