void main(void)
{
__asm
{
int 0x16
}
}
Asm в VC++
Например:
...
asm
{
...
int 16h
...
}
Почему-то компилятор считает, что int - это не вызов прерывания, а тип данных...
Цитата:
Originally posted by Rexulnik
Кто нибудь знает как из VC++ 6.0 вызывать прерывания в секции asm?
Например:
...
asm
{
...
int 16h
...
}
Почему-то компилятор считает, что int - это не вызов прерывания, а тип данных...
Кто нибудь знает как из VC++ 6.0 вызывать прерывания в секции asm?
Например:
...
asm
{
...
int 16h
...
}
Почему-то компилятор считает, что int - это не вызов прерывания, а тип данных...
Вот рабочий пример:
Код:
Я попробовал, и он у меня в строчке int 16h падает...
Цитата:
Originally posted by Rexulnik
Я попробовал, и он у меня в строчке int 16h падает...
Я попробовал, и он у меня в строчке int 16h падает...
Естественно падает. Под XP небось сидишь? Непосредственный вызов перываний разрешен только для DOS и платформ Windows 9x. В платформах NT семейства прямой вызов прерываний на уровне 3 кольца категорически запрещен. Также как и прямая работа с портами.
Тот пример что я привел - просто демонстрировал как сделат так чтобы компилятор понял что <int> - это команда а не тип.
Цитата:
Originally posted by ddnh_bc
В платформах NT семейства прямой вызов прерываний на уровне 3 кольца категорически запрещен.
В платформах NT семейства прямой вызов прерываний на уровне 3 кольца категорически запрещен.
Похоже, единственное прерывание, доступное в пользовательском колце защиты - int 3. При запуске из-под отладчика происходит принудительный переход в режим отладки. Так сказать, программный способ установки бряков.