Главная страница
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.041 c
15-1151659362
Layner
2006-06-30 13:22
2006.07.30
Сервис сам останавливается в W2003R2, хотя в 2000 стабильно


15-1151481375
IMHO
2006-06-28 11:56
2006.07.30
Слово об OpenOffice


2-1152674805
lllEl
2006-07-12 07:26
2006.07.30
Компиляция проекта


3-1148722578
alex1980
2006-05-27 13:36
2006.07.30
производительность SqlServ2000


15-1151649368
syte_ser78
2006-06-30 10:36
2006.07.30
просто вопрос о деньгах.