Приветствую! Эта тема имеет некоторое отношение к этой: http://wasm.ru/forum/viewtopic.php?id=37983 Я перехватываю Winsock функцию send и хочу изменить некоторые данные для отправки. Сейчас мне нужен реально ваш совет. В общем, поскольку я хочу изменить данные, то размер нового потока данных мне не известный, - он может быть больше или меньше первоначального. Подскажите, пожалуйста, как мне правильно сформировать новый поток данных, который может быть намного больше чем первоначальный, тот, который я буду отправлять уже, чтобы не возникало никаких конфликтов в работе основной программы? Пишу на Delphi, хотя нету особой разницы мне, помогите советом. Работаю в чужом процессе, подгрузив библиотеку.
wsd Протокол не завалиться. Но размер новых передаваемых данных может быть больше или меньше. Что делать в таком случае? Нужно, как я понимаю, сначала надо как то выделить память и начать с ней работать. Как изменять (увеличивать или уменьшать) потом размер выделенной памяти?
Да, именно это я и должен делать. С помощью каких функций я могу правильно выделять и изменять размер буффера? Как реализовать это? Я раньше читал про некоторые функции, но у них есть ограничение в размере буффера и они долго работают. Я просто перехватываю данные, которые отправляет send и накапливаю их в свой буффер. Следовательно, каждый раз, как выполняется send, мой буффер должен увеличиваться в размере.
если так то пиши перехваченные данные в файл , или используй VirtualAlloc (или ищи по форуму "резиновый буфер")
karabas_barabas В файл писать не буду, производительность теряется. Про "резиновый буфер" поищу. Booster Кстати, пробовал реализовывать динамические массивы в чужой программе, - постоянно выскакивает Access Violation. Использовал SetLength. CyberManiac Хорошо, учту это. Спасибо всем!!! Если можете еще что то добавить, - пишите.
может не по теме, но все же: найди либу hooklib от z0mbie и посмотри примеры 6 и 7, там тоже перехватывается send и дампит их
выдели буфер большого размера , при достижении данных к границе буфера - скидывай в файл, и заново пиши в буфер (обнулив его), если все данные строковые то проверяй lstrlen(buff) с sizebuff
Charm0nt Это исключение должно возникать. Вы его откатываете и расширяете буфер. Аналогично как расширяется стек.
Всем спасибо. Еще такой вопрос: если библиотеку внедряем во все процессы, то лучше полученные данные обрабатывать в каждом процессе, или из каждого процесса передавать данные в основной процесс загрузчика библиотеки на обработку? Как считаете? Хотя я склоняюсь к первому варианту.
Charm0nt Локально быстрее. Удалённо могут проблемы возникнуть, например описатели копировать нужно и пр. Вобще это для подмены выдачи в поисковиках нужно ? В таком случае способ не жизнеспособный.
punxer Первая мысль была просто. Вобще я уже несколько раз линк давал на семпл. Никто не откатал Вылаживаю в аттаче(пересобрал сейчас, поправил лдасм). Результат на XP: Ничем не детектится перехват, ну это само собой рузумеется.
Clerk Я учусь сейчас, набираюсь опыта, поэтому хочу спросить: почему если для подмены выдачи поисковиков, то способ не является жизнеспособным? И о каком именно способе идет речь? Также, что вы можете сказать о библиотеке от Ms-Rem для перехвата API? Актуальна ли она? Я читал здесь на форуме, что у людей возникали некоторые проблемы (под осью Vista, или Windows 7, не помню точно).