Как сымитировать "недопустимую операцию"?
От: vic_sea  
Дата: 15.07.02 08:41
Оценка:
чтобы вызвать крэш в программе на C++?
сто лет не программировал на ассемблере, все опкоды забыл

штучки типа такой:

_asm
{
   mov eax, 45332
   jmp [eax]
}


не проходят — получается "access violation", т.е. доступ к защищенной
области памяти. а надо в целях тестирования именно "program performed illegal operation"

вставлять DB 555,34,333 в код не предлагать — компилятор ошибку выдает
Re: Как сымитировать "недопустимую операцию"?
От: Edmond  
Дата: 15.07.02 08:43
Оценка:
Здравствуйте vic_sea, Вы писали:

VS>чтобы вызвать крэш в программе на C++?

VS>сто лет не программировал на ассемблере, все опкоды забыл

VS>штучки типа такой:


VS>
VS>_asm
VS>{
VS>   mov eax, 45332
VS>   jmp [eax]
VS>}
VS>


VS>не проходят — получается "access violation", т.е. доступ к защищенной

VS>области памяти. а надо в целях тестирования именно "program performed illegal operation"

VS>вставлять DB 555,34,333 в код не предлагать — компилятор ошибку выдает


ud2... (только выше в Pentium)
С уважением, Edmond
Re[2]: Как сымитировать "недопустимую операцию"?
От: vic_sea  
Дата: 15.07.02 08:59
Оценка:
VS>>не проходят — получается "access violation", т.е. доступ к защищенной
VS>>области памяти. а надо в целях тестирования именно "program performed illegal operation"

VS>>вставлять DB 555,34,333 в код не предлагать — компилятор ошибку выдает


E>ud2... (только выше в Pentium)


не помогает. не падает прога, зараза такая. выдает "external exception" и продолжает
выполняться.
как сделать JMP на область памяти содержащую "мусор"?
Re[3]: Как сымитировать "недопустимую операцию"?
От: Edmond  
Дата: 15.07.02 09:04
Оценка:
Здравствуйте 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 "Я люблю писать всякие глюки, и если эта строка не поможет, собирай мне гроб с колёсами "

С уважением, Edmond
Re[3]: Как сымитировать "недопустимую операцию"?
От: Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.07.02 09:10
Оценка:
Здравствуйте vic_sea, Вы писали:

Вызови привелигированную инструкцию и все.

VS>>>не проходят — получается "access violation", т.е. доступ к защищенной

VS>>>области памяти. а надо в целях тестирования именно "program performed illegal operation"

VS>>>вставлять DB 555,34,333 в код не предлагать — компилятор ошибку выдает


E>>ud2... (только выше в Pentium)


VS>не помогает. не падает прога, зараза такая. выдает "external exception" и продолжает

VS>выполняться.
VS>как сделать JMP на область памяти содержащую "мусор"?



trash   db "trash"
jmp trash


Можно call trash

Такую гадость можно хучь на Си написать.
Re[4]: Как сымитировать "недопустимую операцию"?
От: Edmond  
Дата: 15.07.02 09:14
Оценка:
Здравствуйте 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 появилась на PII
С уважением, Edmond
Re[5]: Как сымитировать "недопустимую операцию"?
От: vic_sea  
Дата: 15.07.02 09:38
Оценка:
E>Прошу прощение: ud2 появилась на PII :maniac:

ud2 вызвает контролируемый exception который перехватывается
программой. т.е. она не падает а продолжает выполняться.
надо неконтролируемую ситуацию создать чтобы Виндоуз ее
прибил.
у меня такое получалось в C некоторыми хитрыми комбинациями
параметров в функции scanf (может это глюк сишной библиотеки,
по идее должно перехватываться в try... catch)
Re[6]: Как сымитировать "недопустимую операцию"?
От: Edmond  
Дата: 15.07.02 09:47
Оценка:
Здравствуйте vic_sea, Вы писали:



E>>Прошу прощение: ud2 появилась на PII


VS>ud2 вызвает контролируемый exception который перехватывается

VS>программой. т.е. она не падает а продолжает выполняться.
VS>надо неконтролируемую ситуацию создать чтобы Виндоуз ее
VS>прибил.
VS>у меня такое получалось в C некоторыми хитрыми комбинациями
VS>параметров в функции scanf (может это глюк сишной библиотеки,
VS>по идее должно перехватываться в try... catch)

Нуу, нет!!!
Опиши подробно, что ты делаешь, по-моему дело не в asm а в C++

Давай, объясни, что надо, что делаеться, что происходит, вот тогда и поразмыслим
С уважением, Edmond
Re[7]: Как сымитировать "недопустимую операцию"?
От: vic_sea  
Дата: 15.07.02 09:56
Оценка:
E>Опиши подробно, что ты делаешь, по-моему дело не в asm а в C++

E>Давай, объясни, что надо, что делаеться, что происходит, вот тогда и поразмыслим


я исследую защиту программ друг от друга при взаимодействии COM клиента и сервера,
в случаях in-process и out-of-process. COM сервер на C++,клиент на Delphi
смысл в том чтобы в COM сервере вызвать такую ошибку чтобы клиент прибился Виндоузом

в случае записывания мусора по случайному адресу клиент отрабатывает эксепшн,
с UD2 и использованием throw из С++ то же самое — перехватывается.
прибивает программу только порча стека:
_asm 
{
   mov esp,5451748
   ret
}

но при этом она молча закрывается и все.
это немного не то что я хочу. хочется чтобы знаменитое окошко "коврик выполнил
недопустимую операцию и будет свернут" вышло.
Re[8]: Как сымитировать "недопустимую операцию"?
От: Edmond  
Дата: 15.07.02 10:04
Оценка:
Здравствуйте 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 не может выполниться!!!

Извини, сейчас мне пора, но срветую почитать Рихтера, хотя там такого нет, здесь надо покумекать.
Завтра буду!!!
С уважением, Edmond
Re[9]: Как сымитировать "недопустимую операцию"?
От: masquer Украина  
Дата: 15.07.02 11:45
Оценка:
Здравствуйте vic_sea,

Попробуй так:
#define crash __asm _emit 0xFFFFFFFF

__asm {
    crash
}
Re[5]: Как сымитировать "недопустимую операцию"?
От: Алекс Россия http://wise-orm.com
Дата: 15.07.02 13:40
Оценка:
Здравствуйте Edmond, Вы писали:

[skipped]

E>Прошу прощение: ud2 появилась на PII


Не правда ваша. Эта команда с незапамятных времен была, ее код всегда вызывал illegal operation. Просто документированна она была поздно.
Re[8]: Как сымитировать "недопустимую операцию"?
От: Алекс Россия http://wise-orm.com
Дата: 15.07.02 13:44
Оценка:
Здравствуйте vic_sea, Вы писали:

E>>Опиши подробно, что ты делаешь, по-моему дело не в asm а в C++


E>>Давай, объясни, что надо, что делаеться, что происходит, вот тогда и поразмыслим


VS>я исследую защиту программ друг от друга при взаимодействии COM клиента и сервера,

VS>в случаях in-process и out-of-process. COM сервер на C++,клиент на Delphi
VS>смысл в том чтобы в COM сервере вызвать такую ошибку чтобы клиент прибился Виндоузом

[skipped]

У дельфы свой обработчик неотфильтрованных исключений. Его нужно убрать, а уж потом баловаться. Убирается он элементарно:
SetUnhandledExceptionFilter(NULL);
Re[6]: Как сымитировать "недопустимую операцию"?
От: Edmond  
Дата: 16.07.02 07:44
Оценка:
Здравствуйте Алекс, Вы писали:

А>Здравствуйте Edmond, Вы писали:


А>[skipped]


E>>Прошу прощение: ud2 появилась на PII


А>Не правда ваша. Эта команда с незапамятных времен была, ее код всегда вызывал illegal operation. Просто документированна она была поздно.


Ну так я имел ввиду official
С уважением, Edmond
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.