Разбор пакета

Тема в разделе "WASM.NETWORKS", создана пользователем Григорий, 15 окт 2006.

  1. Григорий

    Григорий New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2006
    Сообщения:
    32
    Проблема следующая:
    в Си строки выгледят так:
    IPPacket *ipp;
    ipp=(IPPacket *)PacketHeader;
    как их перевести на ассемблер т.е. как они будут выгледить там.
    А то необходимо произвести разбор пакета после получения и
    обязательно на ассемблере.
     
  2. afybc

    afybc New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    73
    вроде так (синтаксис фасма):

    ipp dd ?
    . . .
    mov [ipp], PacketHeader
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    afybc
    mov eax, [PacketHeader]
    mov [ipp], eax
    Скорее так будет более правильно.
    Ведь PacketHeader - это какой-то указатель, и нам нужно этот указатель занести в ipp.
     
  4. afybc

    afybc New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    73
    Ну так то да =) Просто я подразумевал

    ipp dd ?
    PacketHeader some_struct ?
    . . .
    mov [ipp], PacketHeader
     
  5. bers

    bers New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2005
    Сообщения:
    139
    Адрес:
    Russia
    ipp=(IPPacket *)PacketHeader;
    Вообще это называется приведение к типу...
    Сорри - проглядел, что ipp - указатель.
     
  6. P_F

    P_F New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2006
    Сообщения:
    116
    Адрес:
    Russia
    А в чём вопрос ?

    В том как одной переменной - указателю (dword на x32) присвоить
    значение другой - указателя (аналогичной ) ?
    Тогда ответы выше + как вариант:
    push [PacketHeader]
    pop [ipp]

    А если в том как зделать "разбор"
    1 структура должна быть оформлена
    2 обращение к полям примерно так : [reg + IPPacket.поле]
     
  7. Григорий

    Григорий New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2006
    Сообщения:
    32
    Так как у меня не заработали предложенные варианты, то опишу более подробно проблему. Я пишу программу выполняющую функции Firewall. Воспользовавшись статьей “Способы фильтрации сетевого трафика в Windows 9x/2000/Net.2003 Server” я написал фильтр, но он удаляет или пропускает все пакеты. При отправки или получения пакета вызывается следующая функция:

    hookproc proc PacketHeader:lol: WORD, Packet:lol: WORD, PacketLength:WORD,
    RecvInterfaceIndex:WORD,SendInterfaceIndex:WORD,RecvLinkNextHop:lol: WORD,
    SendLinkNextHop:lol: WORD

    mov eax,PF_DROP
    ret
    hookproc endp

    где, как написано в DDK PacketHeader является указателем на структуру IPHeader в которой описаны поля пакета к примеру время жизни пакета.

    Прочитав ваши ответы я делаю следующее: в данных пишу ipp IPHeader <>.
    Функцию изменяю до следующего:

    hookproc proc PacketHeader:lol: WORD, Packet:lol: WORD, PacketLength:WORD,
    RecvInterfaceIndex:WORD,SendInterfaceIndex:WORD,RecvLinkNextHop:lol: WORD,
    SendLinkNextHop:lol: WORD

    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.
    Напишите пожалуйста как это исправить. Отвечайте более подробно. Пожалуйста
     
  8. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    ) попробуй так :

    mov dword ptr [ipp], eax
     
  9. Григорий

    Григорий New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2006
    Сообщения:
    32
    Все запработало!!! Всем спасибо за участие