Форум: "Прочее";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
ВнизУже вторые сутки не могу прочитать байты из буфера Найти похожие ветки
← →
Новичоккк (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c