65 / 65 / 1
Регистрация: 14.04.2010
Сообщений: 170
|
||||||
1 | ||||||
Отладка приложения с прерываниями13.07.2010, 02:21. Показов 7300. Ответов 7
Метки нет (Все метки)
Здравствуйте уважаемые! Ув-е потому, что я действительно уважаю тех, кто добился совершенства в этом не лёгком труде!
Такой вопрос. Тоесть как видно из темы меня интересует прерывание, но не какое-то конкретное, а вообще суть его. Тоесть допустим при тестировании в отладчике проги, это как естественное мероприятие, часто вызывается какое-то прерывание int 10 , int 16 , int 21. Так вот допустим при вызове int 21 в AFDPRO надо нажать раз 10-ть F1 , чтобы вернуться к коду проги. Тоесть допустим идёт по шагово код проги, а при вызове int 21 код вообще уходит куда-то в глубь памяти, допустим код:
Тоесть у меня появился интерес не тупо жать раз 10-ть F1, и ждать, пока выполнение вернётся в данный код проги, а ещё и вникнуть, куда это ход выполнения уходит? Или дайте плиз ссылку, где конкретно и толково разьясняется это. Хочется пошагово рассмотреть это прерывание с подробным описанием, тоесть все промежуточные коды, push, pop, cmp, les какой-то появляется в прерывании! Не знаю, может это и бессмысленный вопрос с точки зрения опытного программёра, но ведь понимание приходит после разглядения вопроса с разных точек зрения!
0
|
13.07.2010, 02:21 | |
Ответы с готовыми решениями:
7
Отладка приложения Отладка приложения в эмуляторе Отладка приложения в Лазарус Отладка приложения IronLanguages |
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
13.07.2010, 11:51 | 2 |
Обработчики прерываний
Когда в реальном режиме выполняется команда INT, управление передается по адресу, который считывается из специального массива, таблицы векторов прерываний, начинающегося в памяти по адресу 0000h:0000h. Каждый элемент этого массива представляет собой дальний адрес обработчика прерывания в формате сегмент:смещение или 4 нулевых байта, если обработчик не установлен. Команда INT помещает в стек регистр флагов и дальний адрес возврата, поэтому, чтобы завершить обработчик, надо выполнить команды popf и retf или одну команду iret, которая в реальном режиме полностью им аналогична. Добавлено через 32 секунды Программное прерывание — синхронное прерывание, которое может осуществить программа с помощью специальной инструкции. В процессорах архитектуры x86 для явного вызова синхронного прерывания имеется инструкция Int, аргументом которой является номер прерывания (от 0 до 255). В IBM PC-совместимых компьютерах обработку некоторых прерываний осуществляют подпрограммы BIOS, хранящиеся в ПЗУ, и это служит интерфейсом для доступа к сервису, предоставляемому BIOS. Также, обслуживание прерываний могут взять на себя BIOS карт расширений (например, сетевых или видеокарт), операционная система и даже обычные (прикладные) программы, которые постоянно находятся в памяти во время работы других программ (т. н. резидентные программы). В отличие от реального режима, в защищённом режиме x86-процессоров обычные программы не могут обслуживать прерывания, эта функция доступна только системному коду (операционной системе). MS-DOS использует для взаимодействия со своими модулями и прикладными программами прерывания с номерами от 20h до 3Fh (числа даны в шестнадцатеричной системе счисления, как это принято при программировании на языке ассемблера x86). Например, доступ к основному множеству функций MS-DOS осуществляется исполнением инструкции Int 21h (при этом номер функции и её аргументы передаются в регистрах). Это распределение номеров прерываний не закреплено аппаратно и другие программы могут устанавливать свои обработчики прерываний вместо или поверх уже имеющихся обработчиков, установленных MS-DOS или другими программами, что, как правило, используется для изменения функционала или расширения списка системных функций. Также, этой возможностью пользуются вирусы. Добавлено через 57 секунд прерывания 10,16 - это BIOS прерывание 21 - это MS-DOS
1
|
65 / 65 / 1
Регистрация: 14.04.2010
Сообщений: 170
|
|
13.07.2010, 12:36 [ТС] | 3 |
Отличнейшее пояснение! Благодарю.
Есть вопрос, который также упомянулся в прерывании и который меня очень интересует. Про реальный и защищённый режимы, тоесть про адресацию памяти. Так как я всего лишь недавно начал изучать Ассемблер, этот вопрос хотелось бы разобрать по песчинке. Согласен, что многое зависит от самостоятельной работы, но при отдельном изучении этой темы, не с помощью книг по Ассемблеру, а с помощью отдельных тем про адресацию столкнулся с небольшими трудностями. Приходится, естественно вникать в весь код Ассемблера, чтобы понять. Так вот, напишите плиз как-бы простыми словами, не заумными, по простому, как вы понимаете защищённый режим. Немного путанница у меня в этих режимах - реальном и защищённом. Семантику можно? этих понятий. Своими словами. Если можно, то желательно с примерами из жизни, типа таких как ниже
0
|
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
|
|
13.07.2010, 20:06 | 4 |
попробую объяснить защищенный режим извини на примере бутылок не умею)). В реальном режиме (правильнее - режиме реальных адресов) ты пишешь в сегментный регистр цифру, в любой другой другую цифру и получаешь реальный адрес по формуле: seg_reg*16+other_reg. В защищенном режиме ты не можешь так просто получить доступ к любому адресу памяти(все защищено). Ты пишешь в сегментный регистр индекс в таблице дескрипторов(вот тут точно на бутылках не объяснить))). Таблица дескрипторов это простой массив 8-ми байтных записей. В каждой этой записи описывается реальный адрес, предел(размер), права доступа к сегменту. Про таблицу прерываний и страничную адресацию лучше не говорить - если интересно - материала море, начиная с интел мануал, главное - все это (защита) в процессорах intel поддерживается аппаратно.
Добавлено через 1 минуту а вообще если ты недавно узнал че такое ассемблер, лучше не трогать защищенный режим))
1
|
65 / 65 / 1
Регистрация: 14.04.2010
Сообщений: 170
|
|
13.07.2010, 20:26 [ТС] | 5 |
Премного благодарен!!! Да! тут без пива не разберёшся в защищённом режиме! Если честно, не хотел сильно заострять внимание на бутылках. То я привёл пример коммента. Согласен, что надо сначало хотябы в режиме реальных адресов разобраться, хотя по немногу уже вникаю, но не в этом дело! Думаю проблема решима с немногим фанатизмом, полюбому.
0
|
65 / 65 / 1
Регистрация: 14.04.2010
Сообщений: 170
|
||||||
07.08.2010, 18:20 [ТС] | 6 | |||||
Ещё раз здравствуйте. Почему при просмотре из под отладчика кода, который ниже, IP не возвращается на тот адрес, который идёт после int 21h ? Возьмём к примеру код:
Допустим IP в отладчике стоит на строке int 21h в вышеприведённом коде. При нажатии F1 вызывается прерывание, 1) IP сразу стаёт 107С. 2) в стеке сразу сохранились 4 значения: адрес возврата после int 21h, флаги - 3000, и какие-то не понятные значения - 0АС6 и 42BD. 3) это сначало вызывается оригинальный обработчик? 4) по этому адресу 107С идёт такое: NOP NOP потом CALL 1161. Что тогда этот CALL вызывает? Какой ещё обработчик? Просветите пожалуйста эти вопросы, которые по пунктам разбиты. Добавлено через 50 минут Про функцию 25 и 35 я уже знаю прерывания 21. Но немного не понятно про оригинальные обработчики! Добавлено через 20 минут Тоесть как я уже отмечал, при нажатии F1 раз 30 не встретилась команда IRET для восстановления IP
0
|
69 / 74 / 0
Регистрация: 15.12.2008
Сообщений: 302
|
|
07.08.2010, 22:07 | 7 |
еще раз читайте как работает int у вас сменился CS:IP при прерывании, посмотрите таблицу векторов
1) IP сразу стаёт 107С. обработчик int 21h, хотя тут неизвестно как работает отладчик в TD Я попадаю на sti команду, возможно adfpro прерывания подменяет на свои процедуры 4) по этому адресу 107С идёт такое: NOP NOP потом CALL 1161. Что тогда этот CALL вызывает?
0
|
65 / 65 / 1
Регистрация: 14.04.2010
Сообщений: 170
|
|
08.08.2010, 03:06 [ТС] | 8 |
--еще раз читайте как работает int у вас сменился CS:IP при прерывании, посмотрите таблицу векторов
У Калашникова нет, как работает именно int ! Тоесть я не хочу сказать, про уважаемого Калашникова, что про int нет ни чего! Это глупо.! Та и я знаю что (вообщето я сам такой) что многие за него пойдут горой. Я и сам знаю, что у меня сменился CS:IP. Посмотреть таблицу! А где её посмотреть? Можно? конкретно. Есть информация, что отладчик глючит! Тоесть не встречает команду IRET для восстановления IP. отладчик в TD Я попадаю на sti команду - и про это можно? немного конкретики, семантики Добавлено через 20 минут Даже читал статьи для дZенствующих . Про векторы конкретно ни чего нет! Добавлено через 2 минуты Или посоветуйте пожалуйста уважаемые, куда мне влезть? на правильный путь, чтобы узнать конкретно про эти прерывания!
0
|
08.08.2010, 03:06 | |
08.08.2010, 03:06 | |
Помогаю со студенческими работами здесь
8
Отладка многопроектного приложения Отладка стороннего приложения Valgrind и отладка приложения Отладка многопоточного приложения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |