2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Вылет браузера
Сообщение04.11.2014, 01:29 


22/10/14
23
Всем привет, ув. форумчане.

Выручайте, вижу люди грамотные и надеюсь, что это так, и вы поможете.

В общем, есть код 32-х битной библиотеки, есть инжектор, написанный на ассемблере ( библиотека, собственно, тоже ). Инжект идет путем создания удаленного потока, отлично, dll`ка грузится в адресное пространство процесса браузера, успешно делает сплайсинг функции и управление передается обработчику.

Собственно, вот обработчик:

Код:

MyHttpSendRequest:
mov  eax, dword [FirstBytes]
mov  cl, byte [FirstBytes + 4]
mov  dword [HttpSendRequestAddr], eax
mov  byte [HttpSendRequestAddr + 4], cl

pop   ebx
lea   eax, [FakelpszHeaders]
mov  dword [esp + 8], eax
call  [MyHttpSendRequest]

mov  ecx, dword [IntercepterFirstBytes]
mov  dl, byte [IntercepterFirstBytes + 4]
mov  dword [HttpSendRequestAddr], ecx
mov  byte [HttpSendRequestAddr + 4], dl
jmp   ebx


Все работает, все запросы браузера подменяются на нужные мне. Но есть одна проблема: после примерно 10 посещенных страниц браузер вылетает. В чем может быть проблема?

 Профиль  
                  
 
 Re: Вылет браузера
Сообщение05.11.2014, 23:12 
Заслуженный участник


02/08/11
6892
Дебажить вылет не пробовали?

-- 06.11.2014, 00:13 --

Сравнить работу проблемного участка (где вылет происходит) в случае с инжектом и без.

 Профиль  
                  
 
 Re: Вылет браузера
Сообщение06.11.2014, 00:36 


22/10/14
23
warlock66613 в сообщении #927207 писал(а):
Дебажить вылет не пробовали?

-- 06.11.2014, 00:13 --

Сравнить работу проблемного участка (где вылет происходит) в случае с инжектом и без.


Да, я сравнил. Спасибо. Происходило переполнение стека, была гиганская функция в браузере, которая соответствовала конвенции вызовов pascal ( ?!, даже делфи юзает stdcall, по-моему ), а я привык к stdcall и забыл, что функция может не подчищать за собой стек.

 Профиль  
                  
 
 Re: Вылет браузера
Сообщение06.11.2014, 01:17 
Заслуженный участник


02/08/11
6892
Nu11ers3t в сообщении #927246 писал(а):
?!, даже делфи юзает stdcall, по-моему
То, что вы описываете, похоже не на pascal, а на cdecl.

 Профиль  
                  
 
 Re: Вылет браузера
Сообщение06.11.2014, 11:08 


22/10/14
23
warlock66613 в сообщении #927256 писал(а):
Nu11ers3t в сообщении #927246 писал(а):
?!, даже делфи юзает stdcall, по-моему
То, что вы описываете, похоже не на pascal, а на cdecl.


Разве?

cdecl - параметры передаются в стеке в обратном порядке. Стек очищает вызывающая функция
pascal - параметры передаются в стеке, в таком же порядке, в каком они стоят в прототипе функции. Стек очищает вызываемая функция
stdcall - параметры передаются в стеке в обратном порядке. Стек очищает вызываемая функция.
fastcall - параметры передаются через регистры, если регистров недостаточно - через стек.

Разве Delphi юзает cdecl?

А насчет того, что браузер юзал pascal я описался, имел ввиду cdecl, спасибо.

 Профиль  
                  
 
 Re: Вылет браузера
Сообщение06.11.2014, 11:18 
Заслуженный участник


02/08/11
6892
Nu11ers3t в сообщении #927344 писал(а):
Разве Delphi юзает cdecl?
Нет, я не это имел в виду.

Кстати, есть ещё одна часто встречаемая конвенция - thiscall - первый параметр через ecx, остальное - как в stdcall.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group