информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetПортрет посетителяГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
exeption 14.05.02 01:57  Число просмотров: 913
Автор: fly4life <Александр Кузнецов> Статус: Elderman
Отредактировано 14.05.02 02:03  Количество правок: 1
<"чистая" ссылка>
> Я бы с большим наслаждением посмотрел, как этот код будет
> работать
> под ДОС в реальном режиме!
>
> Такая искл. ситуация обычно не происходит в
> действительном режиме, но может быть вызвана созданием
> ситуации, где операнд частично выходит за
> ограничение 64К сегмента. Так шо , всё-таки, проц генерит
> int 0Dh . А там
> в обработчике скорее всего int 20h какой-то.


Ни фига!
1) не кажется ли тебе, что для РЕАЛА это исключение странно. В досе оно используется для LPT2.
2) Если оно (исключение 0dh,0ch) генерится, то тачка вешается, и остается молиться богам CTRL+ALT+DEL или RESET
3) Если ниче не генерится, то по этому адресы все равно ничего не записывается и прога работает дальше!
<programming>
exeption 09.05.02 14:10  
Автор: fly4life <Александр Кузнецов> Статус: Elderman
<"чистая" ссылка>
Встретился такой код:
mov si,0ffffh
mov WORD ptr [si],0 ;<-любое число

(Virtual mode)

В W98 режима выдается Прога выполнила недоп. опер и т.д(GP -Fault), в 2000 есесно вылетает без вопросов.
В реальном (в чистом досе) тоже вылетает без вопросов.
Вопрос: какое исключение генерируется в ДОСе?
exeption 09.05.02 23:25  
Автор: :-) <:-)> Статус: Elderman
<"чистая" ссылка>
> Встретился такой код:
> mov si,0ffffh
> mov WORD ptr [si],0 ;<-любое число
>
> (Virtual mode)
>
> В W98 режима выдается Прога выполнила недоп. опер и т.д(GP
> -Fault), в 2000 есесно вылетает без вопросов.
> В реальном (в чистом досе) тоже вылетает без вопросов.
> Вопрос: какое исключение генерируется в ДОСе?

Исключение 13 (GPF) сгенерит 386+ на эот код в реальном режиме.
А если регистр SS
mov si,0ffffh
mov WORD ptr SS:[si],0
тогда - исключение 12 (Stack Fault)
странный exсeption для реального режима 13.05.02 20:59  
Автор: fly4life <Александр Кузнецов> Статус: Elderman
<"чистая" ссылка>
Веселые исключения для реального режима. Я о таких не слышал, нигде в документации я их не видел.
Но еще очень странно, что они генерятся не всегда, и в память ничего не пишется. По моим наблюдениям, генерятся только после запуска определенных приложений, TLINK, TD в их числе. Что они делают, что процессор начинает вырабатывать GP в реальнов режиме?!
странный exсeption для реального режима 14.05.02 20:29  
Автор: :-) <:-)> Статус: Elderman
<"чистая" ссылка>
> Веселые исключения для реального режима. Я о таких не
> слышал, нигде в документации я их не видел.
> Но еще очень странно, что они генерятся не всегда, и в
> память ничего не пишется. По моим наблюдениям, генерятся
> только после запуска определенных приложений, TLINK, TD в
> их числе. Что они делают, что процессор начинает
> вырабатывать GP в реальнов режиме?!

Они всегда генерятся в реальном режиме. Результат зависит от обработчика исключения. TLINK, TD тут скорее всего не причем.
Открываем Ральфа Брауна и смотрим Int 0C, 0D

INT 0D C - CPU-generated (80286+) - GENERAL PROTECTION VIOLATION
Desc: the CPU generates this interrupt when it detects a protection violation
which does not fit under any other category having a separate
interrupt
Notes: called in real mode when
an instruction accesses a memory operand extending beyond offset
FFFFh (i.e. WORD at FFFFh or DWORD at FFFDh or higher) in segment
CS, DS, ES, FG, or GS

INT 0C C - CPU-generated (80286+) - STACK FAULT
Desc: this interrupt is generated in protected mode on a stack overflow or
underflow, or if an inter-level transition or task switch references
a stack segment marked "not present"; it is generated in real mode
on accessing a word operand at SS:FFFFh

Проверить очень просто
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>

void interrupt Int0D(...)
{
  printf("Int 0Dh\n");
  exit(0);
}

void main()
{
  setvect(0xD, Int0D);
  asm mov ax, ds:[0xFFFF]
}

---
При запуске в чистом ДОС выводится
Int 0Dh
Никаких TD, TLINK перед этим я не запускал :-))
C Int 0C аналогично.
странный exсeption для реального режима 14.05.02 01:05  
Автор: Killer{R} Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Веселые исключения для реального режима. Я о таких не
> слышал, нигде в документации я их не видел.
> Но еще очень странно, что они генерятся не всегда, и в
> память ничего не пишется. По моим наблюдениям, генерятся
> только после запуска определенных приложений, TLINK, TD в
> их числе. Что они делают, что процессор начинает
> вырабатывать GP в реальнов режиме?!
Переводят процессор в v86("виртульнай") режим.
странный exсeption для реального режима 14.05.02 01:18  
Автор: fly4life <Александр Кузнецов> Статус: Elderman
<"чистая" ссылка>
> Переводят процессор в v86("виртульнай") режим.

Была такая идея,но для чего TLINKу переводить процессор в защищенный режим, а потом еще и в виртуальный? Зачем столько геморроя для линковки, когда это проще сделать в реальном?
В реальном однако памяти маловато 14.05.02 04:03  
Автор: Dr.Golova Статус: Незарегистрированный пользователь
<"чистая" ссылка>
В реальном однако памяти маловато 14.05.02 11:19  
Автор: fly4life <Александр Кузнецов> Статус: Elderman
<"чистая" ссылка>
Для TKINKа я думаю 640к хватит.

Даже если переходит таким извращенным способом, то ведб все равно возвращается. Неужели исключения защищенного режима после этого будут работать в реальном?
Може попытаться еще сгенерировать и Page Fault :) ?
exeption 09.05.02 21:42  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
> Встретился такой код:
> mov si,0ffffh
> mov WORD ptr [si],0 ;<-любое число
>
> (Virtual mode)
>
> В W98 режима выдается Прога выполнила недоп. опер и т.д(GP
> -Fault), в 2000 есесно вылетает без вопросов.
> В реальном (в чистом досе) тоже вылетает без вопросов.
> Вопрос: какое исключение генерируется в ДОСе?
Poprobui postavit exception handler i posmotret`.:

class Exception
{
private:
unsigned int m_n;
public:
Exception( unsigned int n ) : m_n( n ) {}
~Exception() {}
unsigned int GetNumber() { return m_n; }
};

void trans_func( unsigned int, EXCEPTION_POINTERS* pe)
{
throw Exception(pe->ExceptionRecord->ExceptionCode);
};
int main(int argc, char* argv[])
{
::_set_se_translator(trans_func);
try
{
_asm
{
mov si,0ffffh
mov WORD ptr [si],0 ;<-любое число
}
}catch(Exception e)
{
unsigned int i;
i = e.GetNumber();
}
}
exeption 14.05.02 01:39  
Автор: Sidor Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Я бы с большим наслаждением посмотрел, как этот код будет работать
под ДОС в реальном режиме!

Такая искл. ситуация обычно не происходит в действительном режиме, но может быть вызвана созданием ситуации, где операнд частично выходит за
ограничение 64К сегмента. Так шо , всё-таки, проц генерит int 0Dh . А там
в обработчике скорее всего int 20h какой-то.
exeption 14.05.02 01:57  
Автор: fly4life <Александр Кузнецов> Статус: Elderman
Отредактировано 14.05.02 02:03  Количество правок: 1
<"чистая" ссылка>
> Я бы с большим наслаждением посмотрел, как этот код будет
> работать
> под ДОС в реальном режиме!
>
> Такая искл. ситуация обычно не происходит в
> действительном режиме, но может быть вызвана созданием
> ситуации, где операнд частично выходит за
> ограничение 64К сегмента. Так шо , всё-таки, проц генерит
> int 0Dh . А там
> в обработчике скорее всего int 20h какой-то.


Ни фига!
1) не кажется ли тебе, что для РЕАЛА это исключение странно. В досе оно используется для LPT2.
2) Если оно (исключение 0dh,0ch) генерится, то тачка вешается, и остается молиться богам CTRL+ALT+DEL или RESET
3) Если ниче не генерится, то по этому адресы все равно ничего не записывается и прога работает дальше!
exeption 14.05.02 22:56  
Автор: the_unforg Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Ни фига!
> 1) не кажется ли тебе, что для РЕАЛА это исключение
> странно. В досе оно используется для LPT2.
> 2) Если оно (исключение 0dh,0ch) генерится, то тачка
> вешается, и остается молиться богам CTRL+ALT+DEL или RESET
> 3) Если ниче не генерится, то по этому адресы все равно
> ничего не записывается и прога работает дальше!
Однако ж, в TurboC++ 3.0 ежели где-нить сделать что-то типа такого:
int *a;
....
*a = 1;
т.е. null pointer assignment, то при запуске это ведет себя двояко:
Вариант 1)как правило при завершении работы вылетает сообщение null pointer assignment, и все ОК, работаем дальше,
Вариант 2) GPF, причем не в виде "синего экрана смерти", а просто появляется строка такого вида: Exception 13 (General Protection Fault) at address ...., и все, висим.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach