Здравствуйте! Пишу пакер. Он расположен по одному адресу, а пакуемое приложение выстраивает по другому. После того, как выстроил пакуемое приложение поправил PEB.ImageBaseAddress и LDR_MODULE.BaseAddress. В пакуемом приложении вызывается Под Win2k и WinXP работает нормально. А во
Здравствуйте! Пишу пакер. Он расположен по одному адресу, а пакуемое приложение выстраивает по другому. После того, как выстроил пакуемое приложение поправил PEB.ImageBaseAddress и LDR_MODULE.BaseAddress. Код падает, когда в пакуемом приложении вызывается исключение. Подскажите, с чем это может быть связано? Т.е. что нужно настроить, что бы исключения работали.
Да, забыл сказать, исключение вызывается так: try { throw 1; } catch(...) { cout << "exception\n"; } В debug работает, а в release - нет.
Прошу прощения, я не дописал в первом посте. Работает под win2k и winXP, а вот под winVista и win7 падает.
Прошу прощения, я пока далёк от системного программирования. Мне нужно установить символы для win7 (если я на ней тестирую) В OllyDbg попробовать подебагать оригинальную и упакованную версию таким образом найти различия в процессе выполнения кода?
Предлагаю ввести бан за подобные вопросы, ибо уже надоело. Матчасть перед носом, вверх скролом листни. Символы - Грейт описал где их брать. Читайте.
Попробовал запустить программу под OllyDbg. Так вот, таким образом запущенная программа замечательно работает... Что мне можно попробовать сделать ещё...?
Поставь в опциях Olly Just-In-Time Debugging, тогда в момент ошибки приложение будет загружено в отладчик автоматически.
Тем не менее, господа, может кто сможет просто взять мой код и продебагать его под win7 (Vista)? Буду премного благодарен, если поможете решить мою проблему. Из-за этой ошибки уже около месяца торчу на месте...
чтож вы такое сотворили то разбирайтесь в коде всё есть. Code (Text): .text:77EE8DEE sub_77EE8DEE proc near ; CODE XREF: sub_77EE8D6C+21p .text:77EE8DEE .text:77EE8DEE var_20 = dword ptr -20h .text:77EE8DEE var_1C = dword ptr -1Ch .text:77EE8DEE ms_exc = CPPEH_RECORD ptr -18h .text:77EE8DEE addr_handler = dword ptr 8 .text:77EE8DEE arg_4 = dword ptr 0Ch .text:77EE8DEE arg_8 = dword ptr 10h .text:77EE8DEE .............. .text:77EE8E27 .text:77EE8E27 @loop_check: ; CODE XREF: sub_77EE8DEE+69j .text:77EE8E27 ; sub_77EE8DEE+271j .text:77EE8E27 cmp esi, ebx .text:77EE8E29 jl @exit .text:77EE8E2F lea ecx, [esi+ebx] .text:77EE8E32 sar ecx, 1 .text:77EE8E34 mov eax, ecx .text:77EE8E36 shl eax, 4 .text:77EE8E39 add eax, offset unk_77F9AC0C .text:77EE8E3E mov edi, [eax+4] .text:77EE8E41 mov edx, [eax+8] .text:77EE8E44 add edx, edi .text:77EE8E46 cmp [ebp+addr_handler], edi ; > edi = imagebase module .text:77EE8E49 jb @next_module .text:77EE8E4F cmp [ebp+addr_handler], edx ; > edx = imagebase + imagesize .text:77EE8E52 jb short loc_77EE8E59 .text:77EE8E54 lea ebx, [ecx+1] .text:77EE8E57 jmp short @loop_check .text:77EE8E59 ; --------------------------------------------------------------------------- .text:77EE8E59 .text:77EE8E59 loc_77EE8E59: ; CODE XREF: sub_77EE8DEE+64j .text:77EE8E59 mov ecx, edi .text:77EE8E5B mov [ebp+var_1C], ecx .text:77EE8E5E mov ecx, [eax+0Ch] .text:77EE8E61 mov edx, [ebp+arg_8] .text:77EE8E64 mov [edx], ecx .text:77EE8E66 push dword ptr [eax] .text:77EE8E68 call RtlDecodeSystemPointer ; > return -1
прально что взялся ранно или поздно доделает и будет опыт. но вот читать много нада и меньше спрашивать в общем/
докопался до того, что судя по всему проблема происходит в _RtlIsValidHandler (в _RtlDispatchException) а возможно и в _RtlLookupFunctionTable скорее всего дело связано с тем, что я меняю ImageBase который для выстраиваемого файла отличается от ImageBase пакера косвенно это подтверждается тем, что если я не правлю peb->ImageBaseAddress и LDR_MODULE->BaseAddress, то проблема проявляется и под WinXP