Перехват Send. Почему в конце буфера мусор?

Тема в разделе "WASM.NETWORKS", создана пользователем Selah, 16 фев 2008.

  1. Selah

    Selah New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2007
    Сообщения:
    258
    Делаю перехват функции Send под IE6, при этом в конец буфера добавляется какой-то мусор. Откуда он берется??
     
  2. Joes

    Joes New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2008
    Сообщения:
    98
    Пример кода давай. Такое впечатление что ты захватываешь лишнее.
     
  3. Selah

    Selah New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2007
    Сообщения:
    258
    function Nsend(s: TSocket;Buf: pChar;len, flags:Integer): Integer; stdcall;
    begin
    MessageBox(0,buf,' ',0);
    Result:=Tsend(s,buf,len,flags);
    end;

    Вот что я вижу в месадже:

    POST /index.php HTTP/1.1
    ...
    a=1&b=2яяяяяя

    где сторока "яяяяяя" - мусор.
     
  4. Joes

    Joes New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2008
    Сообщения:
    98
    MessageBox принимает NULL-terminated string, где гарантия что твой буффер будет в конце 0 содержать?
     
  5. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    Selah
    Попробуй сначала вызвать оригинальную функцию, а потом пиши в мессадж бокс
     
  6. Joes

    Joes New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2008
    Сообщения:
    98
    prus
    Твой ответ никакого отношения к проблеме Selah не имеет.
     
  7. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    Joes
    Он хочет поглядеть, что принял... Как Вы заметили "MessageBox принимает NULL-terminated string..."
    Поэтому лучше вызвать оригинальную функцию, чтобы узнать размер буфера, а потом его, например, в файл занести или еще как-нить обработать.
    А мессадж бокс - это для отладки. Все равно в итоге понадобиться знать результат выполнения оригинальной функции...
     
  8. boobl

    boobl New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2008
    Сообщения:
    18
    Там длина буфера передается третьим параметром.
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
  10. Joes

    Joes New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2008
    Сообщения:
    98
    prus
    Принял? Может отправил? :)
     
  11. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    Joes
    Именно принял в функцию Nsend(...).
     
  12. Joes

    Joes New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2008
    Сообщения:
    98
    Ыыы... То что он "принял" в Nsend - в параметрах Nsend.
    Вобщем, RTFM по winsock send()