Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Перехват PR_Write


Автор: lollollollol 14.9.2013, 19:09
Продолжаю попытки написать свой снифер, для IE и всех его оболочек работает как нужно.
Дальше решил разобраться с Лисой.
Пытаюсь перехватить функцию PR_Write из nspr4.dll

Код

  Patch('nspr4.dll','PR_Write',@my_PR_Write,@old_PR_Write);


Но как результат, сразу при старте, лиса вылетает с ошибкой, текст примерно такой:
Ошибка 0x0657687, память не может быть Read 0x000000

Вот так объявил функцию, на сколько вижу из описания
https://developer.mozilla.org/en-US/docs/PR_Write
всё сделал правильно

Код

function my_PR_Write(fd: pointer; buf: pointer; amount: DWORD):integer; stdcall;
begin
  OutputDebugStringA(PChar('- PR_Write - - - - - - - - - - - - - - - - - - - - - - - - -'));
  OutputDebugStringA(Pchar(buf));
  OutputDebugStringA(PChar('- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'));
  Result:=old_PR_Write(fd,buf,amount);
end;

Типы переменных менял по всякому, pointer,integer,dword, firefox всё равно вылетает при запуске.

Полез в гугль, нашел пример
http://nopaste.me/paste/4d775dbb1fa97

Но как результат - пакеты не ловятся, и вылетает не сразу, а после перехода по ссылке на сайте.


Помогите разобраться в чём ошибка, как правильно перехватить трафик лисы?

заранее благодарен, спасибо:)

Автор: Illusion Dolphin 14.9.2013, 20:16
Цитата

stdcall;

Или всё-таки как в приере cdecl ?
Цитата

OutputDebugStringA(Pchar(buf));

А вы уверены что buf не может быть null?

Добавлено через 1 минуту и 9 секунд
И в дебаге смотрели по адресу 0x0657687? Какой колстэк при этом? В функцию вообще заходит my_PR_Write? 

Автор: lollollollol 14.9.2013, 20:22
Цитата

Или всё-таки как в приере cdecl ?

Пробывал. Прописал как в примере

Цитата

А вы уверены что buf не может быть null?

Даже если так, строка
 OutputDebugStringA(PChar('- PR_Write - - - - - - - - - - - - - - - - - - - - - - - - -'));
должны отобразиться, но вылетает при старте программы

Цитата

И в дебаге смотрели по адресу 0x0657687? Какой колстэк при этом? В функцию вообще заходит my_PR_Write?  

Нет не смотрел, сейчас гляну.
Но думаю в функцию не заходит, иначе бы увидел '- PR_Write - - - - ...



Всё, проблему решил! банальная невнимательность!

Только зря потратил ваше время, Спасибо вам огромное!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)