|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Дек 4, 2002 10:34:09 я гворю сам текст ф- выдернуть. из кернела. и прописать в свою прогу. мне нужно то их две штуки. хорошо, другой вопрос. ставлю сен. в примере и доках что то вроде seh sSeh mov seh.1,esp mov seh.2,ebp mov seh.3,offset some соотв. для добавленного секции lea eax,[ebp+offset seh] assume eax:ptr sSen mov [eax].1,esp ... под масм32 ругается на тип пытаюсь менять на seh dd 3dup(?) mov [seh],esp mov [seh+4],ebp mov [seh+8],offset some работает, довожу до lea eax,[ebp+offset seh] mov [eax],esp mov [eax+4],ebp вылетает по первому мов опыты с мов еах,[ebp +offset seh] lea еах,[ebp + seh] ничего не дали. Как? |
|
|
Дата: Дек 4, 2002 12:16:30 >я гворю сам текст ф- выдернуть. из кернела. и прописать в свою >прогу. мне нужно то их две штуки. :)))))))... А че бы тебе описание структуры не показать - места нехватило :) |
|
|
Дата: Дек 4, 2002 12:28:13 у меня нет ее под рукой. там просто, три поля dd подряд я ж говорю, seh dd 3 dup(?) работает. я так понимаю, я в последнем варианте неправильно загружаю адрес структуры или неправильно к ней потом обращаюсь |
|
|
Дата: Дек 4, 2002 15:13:45 .386 .model flat, stdcall option casemap:none ;::::::::::::::::::::::::::::::::::::::::::::::::: include \masm32\include\windows.inc include \masm32\include\user32.inc includelib \masm32\lib\user32.lib SEH STRUCT PrevEsp dd ? PrevEbp dd ? SafeOffset dd ? SEH ENDS .data seh SEH <> ;::::::::::::::::::::::::::::::::::::::::::::::::: .code xHandler proc uses esi edi pExcept:DWORD, pFrame:DWORD, pContext:DWORD, pDispatch:DWORD LOCAL acMessage[64]:CHAR .data g_szException db "Access violation at address: %08X", 0 .code mov ecx, pExcept mov eax, [ecx][EXCEPTION_RECORD.ExceptionCode] .if eax == EXCEPTION_ACCESS_VIOLATION invoke wsprintf, addr acMessage, addr g_szException, \ [ecx][EXCEPTION_RECORD.ExceptionInformation][4] .endif invoke MessageBox, NULL, addr acMessage, NULL, MB_OK + MB_ICONHAND + MB_APPLMODAL lea eax, seh push (SEH PTR [eax]).SafeOffset push (SEH PTR [eax]).PrevEsp push (SEH PTR [eax]).PrevEbp mov eax, pContext pop (CONTEXT PTR [eax]).regEbp pop (CONTEXT PTR [eax]).regEsp pop (CONTEXT PTR [eax]).regEip xor eax, eax ; mov eax, ExceptionContinueExecution ret xHandler endp ;::::::::::::::::::::::::::::::::::::::::::::::::: start: assume fs:nothing push offset xHandler xor eax, eax push fs:[eax] mov fs:[eax], esp mov seh.SafeOffset, offset SafePlace mov seh.PrevEbp, ebp mov seh.PrevEsp, esp ; make exception mov eax, 0C0000000h xchg [eax], eax SafePlace: pop fs:[0] add esp, sizeof DWORD ret end start Посмотри в исходниках на wasm.ru. Есть пример от comrade. Или: http://spiff.tripnet.se/~iczelion/files/SehEn.zip http://spiff.tripnet.se/~iczelion/files/SEH.zip А лучше всего читай это: http://www.jorgon.freeserve.co.uk/ExceptFrame.htm |
|
|
Дата: Дек 4, 2002 16:25:13 смотрел я эти примеры... мне нужно переписать это в относительных смещениях ; вот как мне переписать этот кусок mov seh.SafeOffset, offset SafePlace mov seh.PrevEbp, ebp mov seh.PrevEsp, esp ; вот в что то типа этого, и чтоб под масмом скомпилилось? mov [eax].SafeOffset, offset SafePlace mov [eax].PrevEbp, ebp mov [eax].PrevEsp, esp ;либо mov [eax+8], offset SafePlace mov [eax+4], ebp mov [eax], esp |
|
|
Дата: Дек 4, 2002 16:27:10 интересно, конструкция assume eax, sSEH ptr сработает7 |
|
|
Дата: Дек 4, 2002 17:33:17 ;Вот это работает на MASM 100%. .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc sSEH STRUCT OrgEsp dd ? OrgEbp dd ? SaveEip dd ? sSEH ENDS .data SEH sSEH <0> .code start: ;################################################ TrueSeh proc ASSUME FS : NOTHING push offset SehHandler push FS:[0] mov SEH.OrgEsp, esp mov SEH.OrgEbp, ebp mov SEH.SaveEip, offset SafePlace mov FS:[0], esp ;== xor eax,eax mov [eax],eax ;== SafePlace: pop FS:[0] add esp, 4 ret TrueSeh endp ;######################################################### SehHandler PROC C pExcept:DWORD,pFrame:DWORD,pContext:DWORD,pDispatch:DWORD mov eax, pContext ASSUME EAX : PTR CONTEXT push SEH.SaveEip pop [eax].regEip push SEH.OrgEsp pop [eax].regEsp push SEH.OrgEbp pop [eax].regEbp mov eax, ExceptionContinueExecution ASSUME EAX : NOTHING ret SehHandler ENDP ;######################################################### end start |
|
|
Дата: Дек 4, 2002 18:04:08 *** начало цитаты *** ; вот как мне переписать этот кусок mov seh.SafeOffset, offset SafePlace mov seh.PrevEbp, ebp mov seh.PrevEsp, esp ; вот в что то типа этого, и чтоб под масмом скомпилилось? mov [eax].SafeOffset, offset SafePlace mov [eax].PrevEbp, ebp mov [eax].PrevEsp, esp *** конец цитаты *** ;lea eax, seh ; если seh на стеке mov eax, offset seh assume eax:ptr SEH mov [eax].SafeOffset, offset SafePlace mov [eax].PrevEbp, ebp mov [eax].PrevEsp, esp assume eax:nothing Только зачем? |
|
|
Дата: Дек 5, 2002 11:06:46 Я ж говорю, это новая секция. Надо ж новый адрес структуры определять. Дельта смещение и все такое. Короче я нашел глюк. Фишка в том, что при вызове ф-й ебп менялся. Юзайте средства отладки, они рулез. Исправил- понеслось. Теперь другая проблема, с ф-й гет коммандлине как я понимаю. В каком виде она возвращает строку под НТ и далее, какую ф-ю использовать, А или W, как обеспечить совместимость с 98. Самое плохое что на работе масм32 не работает а дома нет НТ :-((( Засада. |
|
|
Дата: Дек 5, 2002 14:40:59 Нормально все с этими блин ф-ми оказалось, все работает. Может кто подскажет, какие поля РЕ точно нужно модифицировать? Все, особненно те что требует НТ? |
|
|
Дата: Дек 6, 2002 13:55:47 · Поправил: BADik Так просто, к сведению: Долго ковырялся в одной софтине (упакованная самописным упаковщиком с криптацией кодовой секции и прочей замудренностью..., но это к делу не относится)... Так вот. Когда у меня был уже готовый дамп + заголовок + таблица импортов + ресурсы + короче вся фигня -> exe-шник не работал. Я и црц фиксил, и дату/время и атрибуты файла, ВСЕ делал - не работал. Потом допер сделать такую элементарную весчь как выравнивание файла - ЗАРАБОТАЛО! Во, ля... Так сказать, самую маленьку детальку забыл - и на тебе! Попробуй, могет поможет.... ЗЫ: Работает на 2К Сервер, ХР, 98, МЕ... |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.073 |