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

Discussion in 'WASM.NETWORKS' started by Григорий, Oct 15, 2006.

  1. Григорий

    Григорий New Member

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

    afybc New Member

    Blog Posts:
    0
    Joined:
    Jun 30, 2006
    Messages:
    73
    вроде так (синтаксис фасма):

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

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    afybc
    mov eax, [PacketHeader]
    mov [ipp], eax
    Скорее так будет более правильно.
    Ведь PacketHeader - это какой-то указатель, и нам нужно этот указатель занести в ipp.
     
  4. afybc

    afybc New Member

    Blog Posts:
    0
    Joined:
    Jun 30, 2006
    Messages:
    73
    Ну так то да =) Просто я подразумевал

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

    bers New Member

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

    P_F New Member

    Blog Posts:
    0
    Joined:
    Mar 27, 2006
    Messages:
    116
    Location:
    Russia
    А в чём вопрос ?

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

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

    Григорий New Member

    Blog Posts:
    0
    Joined:
    Sep 28, 2006
    Messages:
    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 Синоби даоса Staff Member

    Blog Posts:
    2
    Joined:
    Jun 11, 2004
    Messages:
    3,568
    Location:
    Russia
    ) попробуй так :

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

    Григорий New Member

    Blog Posts:
    0
    Joined:
    Sep 28, 2006
    Messages:
    32
    Все запработало!!! Всем спасибо за участие