![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Добрый вечер.
Появилась не совсем стандартная для меня задача. Есть программа. Она динамически загружает dll_1 в своё адресное пространство. В свою очередь dll_1 динамически загружает dll_2. В какой то момент dll_1 решает посчитать данные, с помощью функции из dll_2. Для этого dll_1 создает дочерний поток и вызывает функцию из dll_2. Функция в dll_2 вычисляет данные (большой массив), выделяет память под ответ HeapAlloc(GetProcessHeap(),0,size), заполняет её результатами расчета и возвращает указатель на эту память как результат операции. В момент выхода в dll_2, значения регистров принимают вид eax = 0x0008e4d0 esp = 0x00f5db14 Итак мы вернулись в dll_1. Значения регистров принимают вид eax = 0x0008e4d0 esp = 0x00f5dbe8 на этом шаге трассировки появляется окно: ![]() Как я понимаю - кадер стека ломается. Как мне заблокировать esp, чтобы это окно не всплывало (и сохранялись данные, а не потенциальный мусор)? |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
отключи проверку
или юзай только RTL функции esp тут ни при чем |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Возможно, неправильно импортируется функция из Dll (в dll1 и dll2 отличаются соглашения о вызове этой функции). Вместо __cdecl написали __stdcall или наоборот.
Советую найти причину ошибки, а не отключать проверку регистра esp. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
а вообще для этого есть дебаггер
|
|||
|
||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Действительно, забыл __stdcall.
Спасибо. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |