Сейчас на форуме: asfa, bartolomeo, _MBK_ (+7 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› IDA 6.1 ошибка памяти - read only при запуске программы из под отладчика |
Посл.ответ | Сообщение |
|
Создано: 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 по какой-то причине и естесственно туда ничего записать не получается. ![]() |
|
Создано: 07 ноября 2011 00:18 · Личное сообщение · #2 |
|
Создано: 07 ноября 2011 00:24 · Поправил: Dim77 · Личное сообщение · #3 |
|
Создано: 07 ноября 2011 00:32 · Личное сообщение · #4 |
|
Создано: 07 ноября 2011 01:13 · Поправил: Dim77 · Личное сообщение · #5 Выложил здесь: Если каких-то библиотек нехватает, то могу дозалить. Пока решения нет, буду смотреть SEH. Спасибо. ![]() |
|
Создано: 09 ноября 2011 10:55 · Личное сообщение · #6 Память по адресу в dx оказывается read по какой-то причине и естесственно туда ничего записать не получается. и эта память не может быть read. Ерунду ты написал. Память не может быть ПРОЧИТАНА. Да и команду ты не понял. Программа обращается в НЕВЫДЕЛЕННУЮ процессу память. Значит надо в отладчике анализировать почему в EAX попал адрес. А скорее всего там ноль. Кстати, а без отладчика программа не падает? Может не в отладчике дело? ![]() |
|
Создано: 09 ноября 2011 13:59 · Личное сообщение · #7 |
|
Создано: 09 ноября 2011 14:12 · Поправил: ajax · Личное сообщение · #8 |
|
Создано: 09 ноября 2011 16:59 · Личное сообщение · #9 Проверю, но вообще-то каждый раз при запуске отладчик ругается на разные адреса, неравные 0. Запущу и приведу пример. И это тоже понятно. Прога читает "мусор". Пока значения "хорошие" - бродит по памяти, при плохих - эксепшн. Возможно в ней нельзя ставить софтовые бряки. Вариантов масса. Я бы попробовал другой отладчик. Опять ты пишешь ерунду. Адрес, где произошел эксепшн естественно ненулевой. А вот адрес откуда пытаются читать - его надо смотреть в регистре EAX(для случая что ты привел), ну или в другом - надо команду анализировать. ![]() |
|
Создано: 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 ![]() |
|
Создано: 10 ноября 2011 13:14 · Личное сообщение · #11 |
|
Создано: 10 ноября 2011 17:23 · Поправил: Dim77 · Личное сообщение · #12 tundra37Включил Ignore всех exceptions в Olly, не заработало. Программа упала с сообщением: Access violation when reading [BAADF00D] - application was unable to process exception. Ситуация похожа вот на Запустил все под Visual Studio и заработало, пока только приаттачился к процессу. Еще не разобрался, как дебагер в студии работает. Но исключения он обрабатывает нормально. несколько поторопился с выводами. Студия может приаттачится к процессу, но не может его запустить. В ней так же как и в Олли и ИДА при отключенной обработке исключений все останавливается на адресе: baadf00d. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› IDA 6.1 ошибка памяти - read only при запуске программы из под отладчика |