2014 dxdy logo

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

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




 
 Вылет браузера
Сообщение04.11.2014, 01:29 
Всем привет, ув. форумчане.

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

В общем, есть код 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 
Дебажить вылет не пробовали?

-- 06.11.2014, 00:13 --

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

 
 
 
 Re: Вылет браузера
Сообщение06.11.2014, 00:36 
warlock66613 в сообщении #927207 писал(а):
Дебажить вылет не пробовали?

-- 06.11.2014, 00:13 --

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


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

 
 
 
 Re: Вылет браузера
Сообщение06.11.2014, 01:17 
Nu11ers3t в сообщении #927246 писал(а):
?!, даже делфи юзает stdcall, по-моему
То, что вы описываете, похоже не на pascal, а на cdecl.

 
 
 
 Re: Вылет браузера
Сообщение06.11.2014, 11:08 
warlock66613 в сообщении #927256 писал(а):
Nu11ers3t в сообщении #927246 писал(а):
?!, даже делфи юзает stdcall, по-моему
То, что вы описываете, похоже не на pascal, а на cdecl.


Разве?

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

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

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

 
 
 
 Re: Вылет браузера
Сообщение06.11.2014, 11:18 
Nu11ers3t в сообщении #927344 писал(а):
Разве Delphi юзает cdecl?
Нет, я не это имел в виду.

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

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group