чтобы вызвать крэш в программе на C++?
сто лет не программировал на ассемблере, все опкоды забыл
штучки типа такой:
_asm
{
mov eax, 45332
jmp [eax]
}
не проходят — получается "access violation", т.е. доступ к защищенной
области памяти. а надо в целях тестирования именно "program performed illegal operation"
вставлять DB 555,34,333 в код не предлагать — компилятор ошибку выдает
Здравствуйте vic_sea, Вы писали:
VS>чтобы вызвать крэш в программе на C++? VS>сто лет не программировал на ассемблере, все опкоды забыл
VS>штучки типа такой:
VS>
VS>не проходят — получается "access violation", т.е. доступ к защищенной VS>области памяти. а надо в целях тестирования именно "program performed illegal operation"
VS>вставлять DB 555,34,333 в код не предлагать — компилятор ошибку выдает
VS>>не проходят — получается "access violation", т.е. доступ к защищенной VS>>области памяти. а надо в целях тестирования именно "program performed illegal operation"
VS>>вставлять DB 555,34,333 в код не предлагать — компилятор ошибку выдает
E>ud2... (только выше в Pentium)
не помогает. не падает прога, зараза такая. выдает "external exception" и продолжает
выполняться.
как сделать JMP на область памяти содержащую "мусор"?
Здравствуйте vic_sea, Вы писали:
VS>>>не проходят — получается "access violation", т.е. доступ к защищенной VS>>>области памяти. а надо в целях тестирования именно "program performed illegal operation"
VS>>>вставлять DB 555,34,333 в код не предлагать — компилятор ошибку выдает
E>>ud2... (только выше в Pentium)
VS>не помогает. не падает прога, зараза такая. выдает "external exception" и продолжает VS>выполняться. VS>как сделать JMP на область памяти содержащую "мусор"?
Чёрт!!!
Ну хорошо!
.code
....
....
....
string db "Я люблю писать всякие глюки, и если эта строка не поможет, собирай мне гроб с колёсами "
Вызови привелигированную инструкцию и все.
VS>>>не проходят — получается "access violation", т.е. доступ к защищенной VS>>>области памяти. а надо в целях тестирования именно "program performed illegal operation"
VS>>>вставлять DB 555,34,333 в код не предлагать — компилятор ошибку выдает
E>>ud2... (только выше в Pentium)
VS>не помогает. не падает прога, зараза такая. выдает "external exception" и продолжает VS>выполняться. VS>как сделать JMP на область памяти содержащую "мусор"?
Здравствуйте Dutchman, Вы писали:
D>Здравствуйте vic_sea, Вы писали:
D>Вызови привелигированную инструкцию и все.
VS>>>>не проходят — получается "access violation", т.е. доступ к защищенной VS>>>>области памяти. а надо в целях тестирования именно "program performed illegal operation"
VS>>>>вставлять DB 555,34,333 в код не предлагать — компилятор ошибку выдает
E>>>ud2... (только выше в Pentium)
VS>>не помогает. не падает прога, зараза такая. выдает "external exception" и продолжает VS>>выполняться. VS>>как сделать JMP на область памяти содержащую "мусор"?
D>
D>trash db "trash"
D>jmp trash
D>
D>Можно call trash
D>Такую гадость можно хучь на Си написать.
ud2 вызвает контролируемый exception который перехватывается
программой. т.е. она не падает а продолжает выполняться.
надо неконтролируемую ситуацию создать чтобы Виндоуз ее
прибил.
у меня такое получалось в C некоторыми хитрыми комбинациями
параметров в функции scanf (может это глюк сишной библиотеки,
по идее должно перехватываться в try... catch)
E>>Прошу прощение: ud2 появилась на PII
VS>ud2 вызвает контролируемый exception который перехватывается VS>программой. т.е. она не падает а продолжает выполняться. VS>надо неконтролируемую ситуацию создать чтобы Виндоуз ее VS>прибил. VS>у меня такое получалось в C некоторыми хитрыми комбинациями VS>параметров в функции scanf (может это глюк сишной библиотеки, VS>по идее должно перехватываться в try... catch)
Нуу, нет!!!
Опиши подробно, что ты делаешь, по-моему дело не в asm а в C++
Давай, объясни, что надо, что делаеться, что происходит, вот тогда и поразмыслим
E>Опиши подробно, что ты делаешь, по-моему дело не в asm а в C++
E>Давай, объясни, что надо, что делаеться, что происходит, вот тогда и поразмыслим
я исследую защиту программ друг от друга при взаимодействии COM клиента и сервера,
в случаях in-process и out-of-process. COM сервер на C++,клиент на Delphi
смысл в том чтобы в COM сервере вызвать такую ошибку чтобы клиент прибился Виндоузом
в случае записывания мусора по случайному адресу клиент отрабатывает эксепшн,
с UD2 и использованием throw из С++ то же самое — перехватывается.
прибивает программу только порча стека:
_asm
{
mov esp,5451748
ret
}
но при этом она молча закрывается и все.
это немного не то что я хочу. хочется чтобы знаменитое окошко "коврик выполнил
недопустимую операцию и будет свернут" вышло.
Здравствуйте vic_sea, Вы писали:
E>>Опиши подробно, что ты делаешь, по-моему дело не в asm а в C++
E>>Давай, объясни, что надо, что делаеться, что происходит, вот тогда и поразмыслим
VS>я исследую защиту программ друг от друга при взаимодействии COM клиента и сервера, VS>в случаях in-process и out-of-process. COM сервер на C++,клиент на Delphi VS>смысл в том чтобы в COM сервере вызвать такую ошибку чтобы клиент прибился Виндоузом
VS>в случае записывания мусора по случайному адресу клиент отрабатывает эксепшн, VS>с UD2 и использованием throw из С++ то же самое — перехватывается. VS>прибивает программу только порча стека: VS>
VS>_asm
VS>{
VS> mov esp,5451748
VS> ret
VS>}
VS>
VS>но при этом она молча закрывается и все. VS>это немного не то что я хочу. хочется чтобы знаменитое окошко "коврик выполнил VS>недопустимую операцию и будет свернут" вышло.
А что ж ты хотел, это же её внутренние обработчики. Во первых мне не известно, что Delphi кидает в обработчик исключений по умолчанию.
Тебе нужно вот что: зарегестрировать свой обработчик, и вернуть обработчик по умолчанию на место, если он был уничтожен Дельфой.
А то, что прога тихо закрываеться это ясно: стек исчерпан SEH не может выполниться!!!
Извини, сейчас мне пора, но срветую почитать Рихтера, хотя там такого нет, здесь надо покумекать.
Завтра буду!!!
Здравствуйте vic_sea, Вы писали:
E>>Опиши подробно, что ты делаешь, по-моему дело не в asm а в C++
E>>Давай, объясни, что надо, что делаеться, что происходит, вот тогда и поразмыслим
VS>я исследую защиту программ друг от друга при взаимодействии COM клиента и сервера, VS>в случаях in-process и out-of-process. COM сервер на C++,клиент на Delphi VS>смысл в том чтобы в COM сервере вызвать такую ошибку чтобы клиент прибился Виндоузом
[skipped]
У дельфы свой обработчик неотфильтрованных исключений. Его нужно убрать, а уж потом баловаться. Убирается он элементарно:
Здравствуйте Алекс, Вы писали:
А>Здравствуйте Edmond, Вы писали:
А>[skipped]
E>>Прошу прощение: ud2 появилась на PII
А>Не правда ваша. Эта команда с незапамятных времен была, ее код всегда вызывал illegal operation. Просто документированна она была поздно.