Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.30;
Скачать: CL | DM;

Вниз

Уже вторые сутки не могу прочитать байты из буфера   Найти похожие ветки 

 
Новичоккк   (2006-07-01 11:21) [0]

DLL внедряется в чужое приложение и ставит Hook на SEND из WinSock32.dll.

function MySend(socket: TSocket; var buf; len, flags: Integer): Integer; stdcall;
var
str:string;
begin
Result := TrueSend(socket, StrMess, len, flags);
end;

Как скопировать buf в строку string? Как только не делал - всегда при чтении буфера получаю "Access Violation at address...", хотя если buf не трогать, а просто передать в TrueSend - сетевое приложение работает без ошибок.


 
Kerk ©   (2006-07-01 11:59) [1]

ммм....пальцем в небо...

SetLength строке пробовал?


 
Новичоккк   (2006-07-01 12:17) [2]

function MySend(s: TSocket; var buf; len, flags: Integer): Integer; stdcall;
var
 BufData: pchar;
begin
 Result := 0;
 GetMem(BufData, Result);
 MessageBoxA(0, "BEFORE", "INFO", MB_ICONEXCLAMATION);
 try
   CopyMemory(BufData, @Buf, Result);
   BufData[0]:=chr(0); //ТУТ ВОЗНИКАЕТ ОШИБКА !!!
   CopyMemory(@Buf, BufData, Result);
   MessageBoxA(0, "AFTER", "INFO", MB_ICONEXCLAMATION);
 finally
   FreeMem(BufData);
 end;
 Result := TrueSend(s, Buf, len, flags);
end;

Хотя вроде всё правильно... Помогите решить проблему
---
Вот DLL и программа, которая её внедряет:
http://webfile.ru/1009692 (21кб)
Скомпилируйте оба проекта, запустите Inject.exe, укажите заголовок окна любого сетевого приложения и нажмите кнопку Inject (если увидите сообщение "DLL Injected", значит библиотека внедрена в приложение). Функция Send будет перехвачена, но при отправке сетевым приложением пакета - произойдет критическая ошибка.


 
Ketmar ©   (2006-07-01 12:18) [3]

подземный стук.


 
Ketmar ©   (2006-07-01 12:21) [4]

вах. плакаю не переставая. советую сначала думать, потом писать.

Result := 0;
GetMem(BufData, Result);
да? точно? "GetMem(BufData, 0);" просто таки обязана выделить немеряно памяти?

ну что за манера нынче -- языка толком не знаем, а уже хуки ставим...


 
Юрий Зотов ©   (2006-07-01 13:10) [5]

> Новичоккк   (01.07.06 11:21)  

> Как скопировать buf в строку string?

Точно так же, как и из любого другого буфера-источника в любой другой буфер-приемник.

1. Сначала для буфера-применика выделяем память размером, равным длине буфера-источника (а не ноль, как у Вас).
2. Потом используем CopyMem или Move.

Примечания.
1. Когда буфер-приемник перестанет быть нужным, выделенную под него память не забываем освободить.
2. В качестве буфера-приемника можно использовать и строку - но что Вы с ней будете делать в чужом приложении? Ее можно будет использовать только внутри самой DLL.


 
Desdechado ©   (2006-07-01 15:12) [6]

> Уже вторые сутки не могу прочитать байты из буфера
Пробки, надо полагать. Увеличь буфер, пробки рассосутся :)



Страницы: 1 вся ветка

Текущий архив: 2006.07.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.063 c
3-1148378856
Stanislav
2006-05-23 14:07
2006.07.30
Объединение таблиц с разных папок


2-1152546932
PP
2006-07-10 19:55
2006.07.30
SQL запрос на выборку из трёх таблиц


1-1150371628
Billis
2006-06-15 15:40
2006.07.30
Как из Thread обращ. к объектам на активной MDI-дочерней форме?


1-1150223213
mmms
2006-06-13 22:26
2006.07.30
Подскажите, как отловить прокрутку на мыши?


2-1152519393
fast2
2006-07-10 12:16
2006.07.30
Как узнать, что строка состоит из сивмолов верхнего регистра?