PSD
Главный специалист
Offline
Пол:
|
|
« : 28-11-2006 12:55 » |
|
VC 7.0 из 2003 го интерпрайза
Проект АТЛ модуля, в качестве итсрумента тестирования использую програмку на VB 6.0. Полгода с разной переодичностью пользовал и никаких проблем тут вдруг не стого не сего отладчик студии не хочет стартовать проект ругается говорит: 'Project1.exe': Loaded 'C:\WINNT\system32\MSCTF.DLL', No symbols loaded. First-chance exception at 0x004013da in Project1.exe: 0xC0000096: Privileged instruction. Unhandled exception at 0x004013da in Project1.exe: 0xC0000096: Privileged instruction.
При этом без отладчика все запускается и работает(в от тестированой части разуметтся)
|
|
« Последнее редактирование: 14-12-2007 22:45 от Алексей1153++ »
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #1 : 28-11-2006 22:01 » |
|
Этот файл существует C:\WINNT\system32\MSCTF.DLL ? Какие были сделаны изменения в системе до этого?
|
|
« Последнее редактирование: 28-11-2006 22:03 от Finch »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #2 : 29-11-2006 05:01 » |
|
Конечно есть. Да ни каких особых изменений не делал, добавил на тестовую форму кнопку и техт бокс.... причем кода их убрал проблема не исчезла.....
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Scorp__)
Молодой специалист
Offline
Пол:
|
|
« Ответ #3 : 29-11-2006 08:25 » |
|
Вообще по идее это озачает, что где-то в скомпилированном модуле используются привилегированные инструкции процессора. То есть в юзер моде используется то, что можно использовать только в кернеле. Может быть этого и нет на самом деле, но отладчик предполагает, что есть.
Попробуй выключить оптимизацию полностью. Сделать ребилд. Больше пока ничего в голову не приходит.
|
|
|
Записан
|
- А Вы сами-то верите в привидения? - Конечно, нет, - ответил лектор и медленно растаял в воздухе.
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #4 : 29-11-2006 09:07 » |
|
Попробую .... меня смущает то что такая хрень произошла на одном проете.... а саму либу меня пользуют несколько приложений тоже на ВБ и там все в порядке....
Хотя тут дальше начался какойто расколбас почемуто при запуске на дебаг релизового проекта он вылетает с ошибкой на создании процесса что вобщемто приисходить недолжно ....
Может не в проекте дело а студия крекнулась?
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Greysfi
Гость
|
|
« Ответ #5 : 29-11-2006 13:52 » |
|
Пришли стек. А именно при дизассемблирование какая последняя команда была вызвана.
|
|
|
Записан
|
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #6 : 30-11-2006 06:28 » |
|
004013C0 jmp dword ptr ds:[401030h] 004013C6 jmp dword ptr ds:[401040h] 004013CC jmp dword ptr ds:[40112Ch] 004013D2 jmp dword ptr ds:[401090h] 004013D8 db ffh 004013D9 db 25h 004013DA ins byte ptr [edi],dx //На этой команде бьет эксепшон 004013DB adc byte ptr [eax],al 004013DE jmp dword ptr ds:[401084h] 004013E4 jmp dword ptr ds:[4010A4h] 004013EA jmp dword ptr ds:[4010B0h] 004013F0 jmp dword ptr ds:[4010B4h] 004013F6 jmp dword ptr ds:[40103Ch]
Call Stack > Project1.exe!004013da()
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Greysfi
Гость
|
|
« Ответ #7 : 30-11-2006 08:06 » |
|
ins - Input from Port to String чтение портов это непривилегированная операция. Значить ее нельзя исполнять в режиме пользователя (ring 3). Вопрос в том как она попала в твой код. Тоесть ты сам ее туда записал или это из какой либы?
|
|
|
Записан
|
|
|
|
Scorp__)
Молодой специалист
Offline
Пол:
|
|
« Ответ #8 : 30-11-2006 09:18 » |
|
Greysfi, ээээ нет. Так ты совсем людей запутаешь Непривилегированная инструкция - это та, которая может выполняться в любом кольце защиты. Другое дело, что на самом деле ins является привилегированной. Если в битовой карте ввода/вывода для данного порта стоит ноль и текущий уровень привилегий соответствует позволенному, то она может выполняться. В третьем кольце ее можно выполнить для COM порта, например, если он нормально открыт. Вообще похоже на то, что порт открыт в режиме только записи, или адрес порта неверный.
|
|
« Последнее редактирование: 30-11-2006 09:20 от Scorp__) »
|
Записан
|
- А Вы сами-то верите в привидения? - Конечно, нет, - ответил лектор и медленно растаял в воздухе.
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #9 : 30-11-2006 09:24 » |
|
Что интересно, в проекте вообще нет работы с портами, работы с ком портами нет и в подключаемой АТЛ либе, там только TCP .....
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Greysfi
Гость
|
|
« Ответ #10 : 30-11-2006 09:25 » |
|
Ой сори я очепятался . Но думаю слова "Значить ее нельзя исполнять в режиме пользователя (ring 3)." это показывают.
|
|
|
Записан
|
|
|
|
Greysfi
Гость
|
|
« Ответ #11 : 30-11-2006 09:26 » |
|
Ты по стеку можешь определить как он на эту инструкцию вылез?
|
|
|
Записан
|
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #12 : 30-11-2006 10:16 » |
|
Call Stack > Project1.exe!004013da()
Это все что есть в стеке, эксепшон вылетает вмоент загрузки исполняемого файла...до загрузки моей АТЛ вообще еще не дошло.
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Greysfi
Гость
|
|
« Ответ #13 : 30-11-2006 10:21 » |
|
Судя по стеку эта инструкция находится в файле Project1.exe. Что это за файл? И он что без отладочной информации собран?
|
|
|
Записан
|
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #14 : 30-11-2006 10:36 » |
|
Совершенно верно этот файk, тестовая оболочка моего АТЛ мдтуля, создан при помощи VB6.0, почему без дебаговой инфы.... да вобщемто она мне там и не нужна, там есть референс на мою библиотеку, есть объявление Piblic psd_fn as new DLS_clients.psd_fn_lib да десяток конопок под котроыми дергаются те или иные методы библиотеки.
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Greysfi
Гость
|
|
« Ответ #15 : 30-11-2006 10:44 » |
|
Просто по ходу дело в самой тестовой проге.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #16 : 30-11-2006 10:51 » |
|
PSD, из листинга видно, что косвенный jump занимает имеет длину 6 байт. Мусор, на котором ты споткнулся, занимает теже 6 байт. Логично предположить, что там должна быть такая же команда jmp [...], но кто-то ее разрушил или переход был сделан не на начало команды.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Scorp__)
Молодой специалист
Offline
Пол:
|
|
« Ответ #17 : 30-11-2006 11:24 » |
|
RXL, вот что значит системный подход Там же действительно видно таблицу переходов, но мы ее-то и не приметили
|
|
|
Записан
|
- А Вы сами-то верите в привидения? - Конечно, нет, - ответил лектор и медленно растаял в воздухе.
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #18 : 30-11-2006 11:31 » |
|
Делать то что?
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #19 : 30-11-2006 12:21 » |
|
Искать точку, с которой был сделан коивой вызов или запись в память по соотв. адресу. Рекомендую справиться по кодам команд, что есть FF и 25.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Scorp__)
Молодой специалист
Offline
Пол:
|
|
« Ответ #20 : 30-11-2006 15:28 » |
|
FF похоже на начало джампа, вот только адрес я не смог расшифровать, то что у меня получается на адрес совсем не похоже. Лучше бы это место в hex режиме увидеть
|
|
|
Записан
|
- А Вы сами-то верите в привидения? - Конечно, нет, - ответил лектор и медленно растаял в воздухе.
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #21 : 30-11-2006 19:46 » |
|
JMP – Unconditional Jump (to same segment) register indirect 1111 1111 : 11 100 reg memory indirect 1111 1111 : mod 100 r/m
JMP – Unconditional Jump (to other segment) indirect intersegment 1111 1111 : mod 101 r/m FF вписывается хорошо, а 25 (00 011 001) - нет. Думаю трабла в этом. Ищи, кто записал в эту точку данные!
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Greysfi
Гость
|
|
« Ответ #22 : 01-12-2006 11:39 » |
|
Чето у меня сомнения по поводу того может ли обычная прога в свой сегмент кода хоть чего нибудь записать это первое. Второе FF 25 90 10 40 00 это дамп команды jmp dword ptr ds:[401090h]. Так что 25h тоже не плохо вписывается. Следовательно мы имеем дело с тем что кто то выше по стеку неправильно сделал вызов или еще хуже jump, возможно хотя и с очень маленькой вероятностью что компилятор не правильно код строит. Так же могут быть приколы со стеком в общем тут разбираться и разбирать.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #23 : 01-12-2006 17:48 » |
|
блин, я ступил: 0х25 с чего-то интерпретировал как 25. Так конечно - 00 100 101 - вписывается.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #24 : 02-12-2006 23:50 » |
|
Это всё интересно, только часто ли в мировой практике подобное наблюдалось в коде, генерируемом VB 6.0, которому скоро уж 10 лет от роду будет? И поскольку ответ отрицательный, то дело наверно не в этом... Что же касается идей записи данных по адресам кода... Поскольку VB - это не C/C++, и в нём нужно очень постараться так криво работать с памятью, опять же, возникает мысль, что проблема в чём-то другом...
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Greysfi
Гость
|
|
« Ответ #25 : 04-12-2006 08:04 » |
|
Во первых насчет записи опять же говорю что скорее всего этот код находиться в странице кода, а ее модифицировать не так уж и просто . То есть что кто то портить код это скорее всего не так. А вот чтобы отбросить ошибку компилятора нужно попробовать построить код с разными там оптимизациями и если они присутствуют то попробовать их отключить. И посмотреть повторяется ли эта бага.
|
|
|
Записан
|
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #26 : 04-12-2006 09:28 » |
|
Скомпилировал Project1.exe с отключенными оптимизациями, вроди как все заработало.... инетерсно почему пол года до этого с влюченой оптимизацией все работало а сейчас сломалось.
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Greysfi
Гость
|
|
« Ответ #27 : 04-12-2006 09:40 » |
|
Иногда оптимизация приводит к странным результатам
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #28 : 04-12-2006 17:04 » |
|
PSD, отладочная сборка обычно без оптимизаций делается. Не зря, наверное...
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Greysfi
Гость
|
|
« Ответ #29 : 05-12-2006 08:01 » |
|
Отладка оптимизированного кода может стать очень интересной вещью
|
|
|
Записан
|
|
|
|
|