Сейчас на форуме: asfa, bartolomeo, _MBK_ (+7 невидимых)

 eXeL@B —› Вопросы новичков —› IDA 6.1 ошибка памяти - read only при запуске программы из под отладчика
Посл.ответ Сообщение

Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 07 ноября 2011 00:15 · Поправил: Dim77
· Личное сообщение · #1

При попытке запуска программы из под отладчика IDA 6.1 отладчик выдает что инструкция по адресу: A93B395 обратилась к памяти по адресу: <разные адреса от одного запуска к другому> и эта память не может быть read.

Инструкция ниже выполняется много раз успешно в процессе загрузки и выгрузки системных и програмных библиотек для программы, которую я пытаюсь запустить. Затем, в определенный момент возникает ошибка, приведенная выше.

Я пытался запускать программу под отладчиком в Windows Safe Mode, чтобы посмотреть, как уменьшение количества загруженных процессов влияет на распределение памяти. Это не помогло.

Есть впечатление, что отладчик и библиотеки используют в какой-то момент один и тот же сегмент памяти. Можно их как-то разнести или еще как-то это поправить?

Видел описание похожей проблемы здесь Решение там не описано, предложено пользоватся другим отладчиком - это все что возможно сделать?

Shw32.dll:0A93B395 mov dx, [eax+0Eh]
Shw32.dll:0A93B399 mov cx, dx
Shw32.dll:0A93B39C and cx, 0FFF8h
Shw32.dll:0A93B3A1 cmp cx, 0CAD0h
Shw32.dll:0A93B3A6 jnz short loc_A93B3D1
Shw32.dll:0A93B3A8 and dl, 7
Shw32.dll:0A93B3AB cmp dl, 5
Shw32.dll:0A93B3AE jnb short loc_A93B3D1
Shw32.dll:0A93B3B0 mov eax, [eax]
Shw32.dll:0A93B3B2 cmp word ptr [eax+20h], 0BEADh
Shw32.dll:0A93B3B8 jnz short loc_A93B3D1
Shw32.dll:0A93B3BA mov eax, 1
Shw32.dll:0A93B3BF mov dword ptr [ebp-4], 0FFFFFFFFh
Shw32.dll:0A93B3C6 jmp short loc_A93B3DA

Операция mov dx, [eax+0Eh] - это то на чем все останавливается. Память по адресу в dx оказывается read по какой-то причине и естесственно туда ничего записать не получается.




Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 07 ноября 2011 00:18
· Личное сообщение · #2

а отдать на растерзание данное исключение процессу религия не позволяет?



Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 07 ноября 2011 00:24 · Поправил: Dim77
· Личное сообщение · #3

После 8-10 таких исключений программа вылетает с кодом: -1073741819.




Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 07 ноября 2011 00:32
· Личное сообщение · #4

Значит, путь тебе в SEH.
Где-то в обработчике ошибки, он понимает что программа отлаживается. Мб выложишь пациента? (естественно вместе с exe)



Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 07 ноября 2011 01:13 · Поправил: Dim77
· Личное сообщение · #5

Выложил здесь:

-->D2 Exe (4 MB)<--
-->Shw32.dll (110.03 KB)<--
-->C4dll-R.dll (127.5 KB) <--
-->Msvcrt.dll (271.27 KB) <--
-->D2debug011111.idb (64.74 MB) <--

Если каких-то библиотек нехватает, то могу дозалить.

Пока решения нет, буду смотреть SEH. Спасибо.



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 09 ноября 2011 10:55
· Личное сообщение · #6

Память по адресу в dx оказывается read по какой-то причине и естесственно туда ничего записать не получается. и эта память не может быть read.
Ерунду ты написал. Память не может быть ПРОЧИТАНА. Да и команду ты не понял. Программа обращается в НЕВЫДЕЛЕННУЮ процессу память. Значит надо в отладчике анализировать почему в EAX попал адрес.
А скорее всего там ноль.
Кстати, а без отладчика программа не падает? Может не в отладчике дело?



Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 09 ноября 2011 13:59
· Личное сообщение · #7

Без отладчика программа не падает.

Проверю, но вообще-то каждый раз при запуске отладчик ругается на разные адреса, неравные 0. Запущу и приведу пример.




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 09 ноября 2011 14:12 · Поправил: ajax
· Личное сообщение · #8

Dim77
idastealth, возможно, спасет "отца русской демократии"
да, лично мне отладка в 6.1 не нравится. все еще юзаю 5.5

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 09 ноября 2011 16:59
· Личное сообщение · #9

Проверю, но вообще-то каждый раз при запуске отладчик ругается на разные адреса, неравные 0. Запущу и приведу пример.
И это тоже понятно. Прога читает "мусор". Пока значения "хорошие" - бродит по памяти, при плохих - эксепшн.
Возможно в ней нельзя ставить софтовые бряки. Вариантов масса. Я бы попробовал другой отладчик.
Опять ты пишешь ерунду. Адрес, где произошел эксепшн естественно ненулевой. А вот адрес откуда пытаются читать - его надо смотреть в регистре EAX(для случая что ты привел), ну или в другом - надо команду анализировать.



Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 09 ноября 2011 19:24 · Поправил: Dim77
· Личное сообщение · #10

Подключил IDAStealth, пока не помогает. Нужно еще поиграться с настройками. Если есть какие-либо соображения о том, как его настроить, то буду благодарен.

По поводу памяти: Ошибка, которую программа выдает: The instruction at 0xA93B395 (см выше код инструкции) referenced memory at 0x1FD000E. The memory can not be read -> 01FD000E. (exc. code c0000005, tid 748).

Содержание регистров:

EAX 01FD0000
EDX 01F80000

Регистр, откуда процедура вызывается: EIP

Запустил под OllyDbg. Все тоже самое, только в Olly видно, где начинается обработка исключений. Кроме того, первый раз, когда я под ним запустил, то после того, как программа падает, он написал, что мы дошли до последнего SEH. А сейчас просто уходит в бесконечный loop на определенном адресе.

Кстати IDAStealth, дает эту информацию:

IDAStealth: debugger reached top-level SEH handler at 0x6cc0aa
IDAStealth: debugger reached top-level SEH handler at 0x7c839ad8

Внизу немного больше кода около места, где все останавливается.

CPU Disasm
Address Hex dump Command Comments
0A93B360 /$ 64:A1 0000000 MOV EAX,DWORD PTR FS:[0] ; SHW32.0A93B360(guessed Arg1)
0A93B366 |. 55 PUSH EBP
0A93B367 |. 8BEC MOV EBP,ESP
0A93B369 |. 6A FF PUSH -1
0A93B36B |. 68 7041940A PUSH OFFSET 0A944170
0A93B370 |. 68 60D2930A PUSH 0A93D260
0A93B375 |. 50 PUSH EAX
0A93B376 |. 64:8925 00000 MOV DWORD PTR FS:[0],ESP ; Installs SE handler 0A93D260
0A93B37D |. 83EC 10 SUB ESP,10
0A93B380 |. 53 PUSH EBX
0A93B381 |. 56 PUSH ESI
0A93B382 |. 57 PUSH EDI
0A93B383 |. 8965 E8 MOV DWORD PTR SS:[LOCAL.6],ESP
0A93B386 |. C745 FC 00000 MOV DWORD PTR SS:[LOCAL.1],0
0A93B38D |. 8B45 08 MOV EAX,DWORD PTR SS:[ARG.1]
0A93B390 |. 25 0000FFFF AND EAX,FFFF0000
0A93B395 |. 66:8B50 0E MOV DX,WORD PTR DS:[EAX+0E]
0A93B399 |. 66:8BCA MOV CX,DX
0A93B39C |. 66:81E1 F8FF AND CX,FFF8
0A93B3A1 |. 66:81F9 D0CA CMP CX,0CAD0
0A93B3A6 |. 75 29 JNE SHORT 0A93B3D1
0A93B3A8 |. 80E2 07 AND DL,07
0A93B3AB |. 80FA 05 CMP DL,5
0A93B3AE |. 73 21 JNB SHORT 0A93B3D1
0A93B3B0 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
0A93B3B2 |. 66:8178 20 AD CMP WORD PTR DS:[EAX+20],0BEAD
0A93B3B8 |. 75 17 JNE SHORT 0A93B3D1
0A93B3BA |. B8 01000000 MOV EAX,1
0A93B3BF |. C745 FC FFFFF MOV DWORD PTR SS:[LOCAL.1],-1
0A93B3C6 \. EB 12 JMP SHORT 0A93B3DA



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 10 ноября 2011 13:14
· Личное сообщение · #11

Dim77 SHW32 вообще-то занимется распределением памяти. Возможно это "доброкачественный" эксепшн - просто проверяется заказана ли память и если не хватает - дозаказывают. В Олли надо просто отключить анализ всех эксепшенов - возможно все заработает.



Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 10 ноября 2011 17:23 · Поправил: Dim77
· Личное сообщение · #12

tundra37Включил Ignore всех exceptions в Olly, не заработало. Программа упала с сообщением: Access violation when reading [BAADF00D] - application was unable to process exception.

Ситуация похожа вот на этот баг. Хотя у меня в IDA, при возникновении исключения TF бит равен 0, хотя возможно нужно смотреть по шагам.

Запустил все под Visual Studio и заработало, пока только приаттачился к процессу. Еще не разобрался, как дебагер в студии работает. Но исключения он обрабатывает нормально.

несколько поторопился с выводами. Студия может приаттачится к процессу, но не может его запустить. В ней так же как и в Олли и ИДА при отключенной обработке исключений все останавливается на адресе: baadf00d.


 eXeL@B —› Вопросы новичков —› IDA 6.1 ошибка памяти - read only при запуске программы из под отладчика
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати