Помогите раскурить код

Тема в разделе "WASM.HEAP", создана пользователем Green_DiCk, 10 июл 2008.

  1. Green_DiCk

    Green_DiCk New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2007
    Сообщения:
    338
    Скачал пример программы для работы через сокс5-прокси.(с wasm'a и скачал - _http://wasm.ru/baixado.php?mode=src&id=241) В ассемблере шарю слабо, но даже при моих скромных познаниях код показался странным. Вот фрагмент (комментарии с префиксом ++ - мои, т.е. как я это понимаю):

    Код (Text):
    1. NonAuthentificate:                    ;++ Подключение к прокси без аутентификации
    2.     invoke memset,addr buffer,NULL,BufferSize
    3.     mov ebx,offset buffer
    4.     mov al,5
    5.     mov [ebx],al
    6.     inc ebx
    7.     mov al,1             ; 1 - TCP(CONNECT), 2 - TCP(BIND), 3 - UPD
    8.     mov [ebx],al
    9.     add ebx,2
    10.     mov al,3
    11.     mov [ebx],al
    12.     inc ebx
    13.  
    14.              ;++ В первые четыре байта массива buffer положили числа 5, 1, 0 и 3      соответсвенно
    15.     push ebx
    16.     invoke StrLen,addr DestHost
    17.     pop ebx
    18.     mov [ebx],al       ;++ в пятый байт поместили длину строки strlen(DestHost)
    19.     inc ebx
    20.     invoke strcpy,ebx,addr DestHost    ; ++ копирнули строку DestHost в массив (buffer + 6)
    21.     push ebx
    22.     invoke StrToInt,addr DestPort
    23.     pop ebx
    24.     mov [ebx],al                    ; Порт на конечном узле
    25.  
    26. ; ++ а вот предыдущее действие решительно непонятно. Не инкрементируя указатель, записали в массив мл. байт номера порта. то есть затерли первый байт строки DestHost
    27.     dec ebx            
    28.     mov [ebx],ah
    29. ;++ Странности продолжаются. Передвинули указатель на 1 байт взад и затерли старшим байтом номера порта длину строки strlen(DestHost)
    30.     add ebx,2
    31.     mov edx,offset buffer
    32.     sub ebx,edx
    33.     push ebx
    34.     invoke  FillErrorStr,addr ErrorSocketSendStr
    35.     pop ebx
    36.     invoke  send,m_Socket,offset buffer,ebx,NULL  
    37.     cmp eax,SOCKET_ERROR
    38.     je  close_m_Socket
    или это все тонкости формирования запросов для сокс5-прокси?))
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Green_DiCk
    Посмотри внимательно на подпрограмму strcpy. После ее завершения EBX указывает на байт после нульсимвола, т.о. AL попадает по этому адресу, а AH вместо нульсимвола. Т.е. после add ebx,2 в буфер будет помещено: 5, 1, 0, 3, длина_строки, строка, порт, а EBX будет указывать на следующий байт.
     
  3. Green_DiCk

    Green_DiCk New Member

    Публикаций:
    0
    Регистрация:
    8 июл 2007
    Сообщения:
    338
    q_q
    Точняк... я думал это стандартная ф-ция. а она оказывается в конце файла определена. А вообще есть ли стандартные ф-ции, которые меняют содержимое регистров (помимо eax)? Чтобы в будущем не втыкать так долго и недоуменно.


    PS Не люблю создавать кучу топиков, так что еще один вопрос: есть у кого компонент (класс, либа, дллка или просто кусок кода (если код, то желательно на С/С++)) для парсинга html кода. то есть у меня есть html-страница, мне нужно выбросить все теги и получить "чистый" текст, форматированный пробелами, табуляцией, переводом строки и т.п. на крайняк сойдет даже не форматированный, то есть просто разделенный пробелами.
     
  4. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Обычно ECX, EDX еще меняется.