Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

нужна необычная обработка исключений для collapse [Delphi, Windows]


Страницы:   1 2

Владимир Кладов ©   (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 :(


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо