![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
нужна необычная обработка исключений для collapse [Delphi, Windows]
Владимир Кладов © (2005-03-12 20:43:00)кто-нибудь разбирался глубоко в обработке исключений на самом нижнем уровне? мне нужно вот что: научиться по исключению в обработчике вернуть управление на следующую команду. Команда, вызывающая исключение - некоторая 1-байтовая машинная инструкция, фиксированная, но любая. Хоть int 3 (не очень хорошо), а лучше например HLT ($F4 кажется). Для collapse надо, чтобы переход к выполнению P-кода занимал всего 1 байт, а не 5, иначе овчинка дороговата...
Т.е. на самом деле надо чтобы стек был в той же позиции, что и при исключении, и все регистры те же, но я мог бы смоделировать вызов некоторой подпрограммы, как если бы call сработал. Можно направить меня куда-нибудь, где ответ знают.
Другой вариант решения - "начать отладку" процесса, ловить событие соответствующее. Правда, в этой области я еще ничего не знаю, не знаю даже получится ли вообще процессу начать отладку самого себя...
alexa (2005-04-27 04:45:00) [1]Уже что то получилось по collapse ? страсть как интересно.
DeimosX7 (2005-04-18 11:23:00) [2]Кстати, для желающих получше понять обработку исключений рекоммендую посмотреть тут : http://wasm.ru/article.php?article=GordonExcept
не скажу, что что-то новое, но объяснено достаточно подробно..
Владимир Кладов (2005-03-31 16:26:00) [3]http://bonanzas.rinet.ru/Collapse.zip
Владимир Кладов (2005-03-31 16:24:00) [4]нет еще но скоро будет. Я сейчас отладчик переделываю. Да, можно скачать версию standalone http://bonanzas.rinet.ru/collapse.zip, она не многим отличается.
alexa (2005-03-31 04:24:00) [5]а то что получилось, гдето скачать можно?
Владимир Кладов (2005-03-30 17:14:00) [6]вообще-то если удастся (позже) сделать компилятор паскаль->П-код, то компилятор П-код->ассемблер уже есть, и подойдет и к free-pascal. Но все равно на платформе PC. Сейчас я сделал что MCK генерит П-код, это не сложнее чем генерить паскаль-код. А там посмотрю что получится.
Yhrik! (2005-03-30 06:47:00) [7]Мультиплатформа под Collapse, даже не планируется?
Идея-то хорошая
Владимир Кладов (2005-03-24 20:10:00) [8]оно так и будет. Но я рассчитываю, что потери будут незначительные. Во-первых большую часть работает API, и программа просто ждет когда отработает функция API или придет сообщение. Во-вторых в первую очередь будут П-кодироваться инициализация форм. Это сэкономит код, который затрачивается на эту нужную, но одноразовую процедуру, особенно на формах с большим количеством контролов и настроек. Заодно можно и создание окна в самом KOL.pas заП-кодировать, там большая скорость не требуется.
ECM (2005-03-24 19:55:00) [9]З.Ы. Я имел ввиду частое переключение между обычным и P-кодом...
ECM (2005-03-24 19:39:00) [10]Наверное еще бОльшие потери производительности получаться если в программе будет часть обычного и часть P-кода... :(
thaddy (2005-03-24 19:31:00) [11]Aha!, dot KOL .kol :)
Владимир Кладов (2005-03-24 18:59:00) [12]collapse is not an assembler or machine code. It is 2-stack P-machine with is own emulator (280..550 bytes of code). It just to make some things with much smaller code but not faster, otherwise very slow (but I hope this will not be determined by users in many cases).
thaddy (2005-03-24 06:53:00) [13]Vladimir,
I wish you luck with collapse, it is very promising...
Would it be possible to support sse,sse2, sse3 and Amd 3dNow flavors from collapse? ( to optimize media based on processor test, not for size)?
Thaddy
Владимир Кладов (2005-03-22 20:46:00) [14]коллапс постепенно продвигается к реализации. Уже практически готов компилятор, на этот раз - не standalone, а для компиляции вставок на П-коде, написанных вручную и сгенеренных. Для генерации - первый кандидат: инициализация форм в MCK. MCK несложно доработать, чтобы он заодно и П-код генерил.
Это я к сведению, чтобы народ знал, чем я занимаюсь.
ECM (2005-03-14 18:07:00) [15]Владимир Кладов (14.03.05 17:42) [12]
конечно, первый параметр
Tnx - уже нашел ... :)
Владимир Кладов (2005-03-14 17:42:00) [16]конечно, первый параметр - указатель на структуру TExceptionRecord. Мне нужен был только третий - указатель на TContext.
ECM (2005-03-14 15:32:00) [17]>Владимир Кладов (14.03.05 15:02) [10]
>ничего подобного, замена системных модулей не требуется.
Действительно, первый раз (без замены) поставил Install первым
и все затиралось ... :)
Смотрю сейчас такой момент (пока ничего не нашел):
А есть возможность в Collapse_Handler добраться до кода исключения? (например для AV - $c0000005)
Владимир Кладов (2005-03-14 15:02:00) [18]ничего подобного, замена системных модулей не требуется. Просто инициализация должна уже отработать когда вызывается Install. Иначе Delphi в инициализации ставит свою такую же замену (ну не совсем такую же, короче свой unwind). Если после инициализации, то заменяется Delph'овский unwind и все работает. Я еще опционально у себя добавил проверку, что еще Install не вызывался, так чтобы если 2 раза вызовут, ничего не испортить.
Проще скопировать труктуру, и код красивее получается, насчет _esp, Delphi действительно почему-то считает, что речь о регистре ESP а не о поле, хотя ему явно все написано. Дурной какой-то :)
ECM (2005-03-14 12:40:00) [19]З.Ы. пропустил $
mov dword ptr [edx+ $c4]{.TContext._Esp}, eax
ECM (2005-03-14 12:38:00) [20]Попробовал ... :) Вещь полезная !
Пара тонкостей, для тех кто захочет попробовать:
1) Обязательно нужна замена системных модулей (иначе не заработает)
2) Нужна коррекция модуля Windows.pas в части структуры _CONTEXT - поле Esp надо переименовать в _Esp (как Владимир и очевидно и поступил), либо заменить строки с _Esp на следующие:
mov eax, dword ptr [edx+$c4]//.TContext._Esp
sub eax, 4
mov dword ptr [edx+c4]{.TContext._Esp}, eax
... почему-то компилятор отказывается вычислять смещение с TContext.Esp, а упорно заменяет его на сам регистр ESP :(