Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Asm в VC++

439
30 марта 2005 года
Rexulnik
217 / / 09.02.2005
Кто нибудь знает как из VC++ 6.0 вызывать прерывания в секции asm?
Например:
...
asm
{
...
int 16h
...
}
Почему-то компилятор считает, что int - это не вызов прерывания, а тип данных...
487
30 марта 2005 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by Rexulnik
Кто нибудь знает как из VC++ 6.0 вызывать прерывания в секции asm?
Например:
...
asm
{
...
int 16h
...
}
Почему-то компилятор считает, что int - это не вызов прерывания, а тип данных...



Вот рабочий пример:

 
Код:
void main(void)
{
   __asm
   {
      int 0x16
   }
}
439
31 марта 2005 года
Rexulnik
217 / / 09.02.2005
Я попробовал, и он у меня в строчке int 16h падает...
487
31 марта 2005 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by Rexulnik
Я попробовал, и он у меня в строчке int 16h падает...



Естественно падает. Под XP небось сидишь? Непосредственный вызов перываний разрешен только для DOS и платформ Windows 9x. В платформах NT семейства прямой вызов прерываний на уровне 3 кольца категорически запрещен. Также как и прямая работа с портами.

Тот пример что я привел - просто демонстрировал как сделат так чтобы компилятор понял что <int> - это команда а не тип.

10
31 марта 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by ddnh_bc
В платформах NT семейства прямой вызов прерываний на уровне 3 кольца категорически запрещен.


Похоже, единственное прерывание, доступное в пользовательском колце защиты - int 3. При запуске из-под отладчика происходит принудительный переход в режим отладки. Так сказать, программный способ установки бряков.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог