Қоңырау қақпасы (Intel) - Call gate (Intel)

A қоңырау қақпасы - бұл Intel-дегі механизм x86 сәулеті өзгерту үшін артықшылық деңгейі алдын-ала анықталған процесті жүзеге асырады функционалдық шақыру CALL FAR нұсқауын қолдану.

Шолу

Қоңырау қақпалары артықшылығы аз кодқа артықшылық деңгейі жоғары кодты шақыруға мүмкіндік беруге арналған. Механизмнің бұл түрі қолданылатын заманауи операциялық жүйелерде өте қажет жадты қорғау өйткені бұл қолданушы қосымшаларын пайдалануға мүмкіндік береді ядро функциялары және жүйелік қоңыраулар арқылы басқарылатындай етіп операциялық жүйе.

Қоңырау қақпалары арқылы қол жеткізілген дескрипторға сілтеме жасау үшін арнайы таңдау мәнін пайдаланады Дескрипторлардың ғаламдық кестесі немесе Жергілікті дескриптор кестесі, артықшылық шекарасында қоңырау шалу үшін қажетті ақпаратты қамтиды. Бұл қолданылатын механизмге ұқсас үзілістер.

Пайдалану

Қоңырау шалу қақпасы қазірдің өзінде орнатылған операциялық жүйе ядро, код қажет болған жағдайда ҚОЛДАУ шақырады сегмент селекторы (ығысу өрісі еленбейді). Процессор жазбаның дұрыс екендігіне және кодтың қақпаны пайдалану үшін жеткілікті артықшылықта жұмыс істейтіндігіне көз жеткізу үшін бірқатар тексерулер жүргізеді. Барлық тексерулер өтті деп есептесек, жаңа CS /EIP ішінен жүктеледі сегменттік дескриптор, және жалғастыру туралы ақпарат жаңа артықшылық деңгейінің стегіне жіберіледі (ескі SS, ескі ESP, ескі CS, ескі EIP, сол ретпен). Қажет болса, параметрлерді ескі стектен жаңа стекке көшіруге болады. Көшіруге болатын параметрлер саны шақыру қақпасының дескрипторында орналасқан.

Ядро RET FAR командасының көмегімен пайдаланушы кеңістігінің бағдарламасына оралуы мүмкін, ол жалғасу туралы ақпаратты стектен шығарады және сыртқы артықшылық деңгейіне оралады.

Қоңырау қақпасы дескрипторының форматы

typedef құрылым _CALL_GATE{	USHORT OffsetLow;	USHORT Таңдаушы;	UCHAR NumberOfArguments:5;	UCHAR Резервтелген:3;	UCHAR Түрі:5; // i386-да 01100, i286-да 00100	UCHAR Dpl:2;	UCHAR Сыйлық:1;	USHORT ОфсетЖоғары;}CALL_GATE,*PCALL_GATE;

Алдыңғы пайдалану

Мультик қоңырау қақпаларының алғашқы қолданушысы болды. The Honeywell 6180 архитектураның бір бөлігі ретінде қоңырау қақпалары болды, бірақ мультиктер ескірулерде оларды модельдеді GE 645.

OS / 2 арасында ауысу үшін Intel қоңырау қақпаларының алғашқы пайдаланушысы болды қолдану коды 3 сақинада, 2 сақинада жұмыс жасайтын артықшылықты код және 0 сақинада жұмыс істеу.

Windows 95 драйверлерін және процестің ауысуын 0 сақинасында орындайды, ал қосымшалар, соның ішінде API DLL, мысалы kernel32.dll және krnl386.exe 3 сақинасында орындалады. VWIN32.VXD драйвері 0 сақинасында операциялық жүйенің негізгі примитивтерін ұсынады. Бұл драйверді шақыруға мүмкіндік береді 16 биттік қосымшалардан (MSDOS және Win16) функциялар. Бұл мекен-жай AX тіркелімінде 1684 сағ болатын INT 2Fh қоңырауы арқылы алынады. Қандай VxD антенри нүктесіне сұраныс бар екенін анықтау үшін BX регистрі 16-разрядты VxD идентификаторына орнатылған. INT нұсқауынан оралғаннан кейін ES.DI регистрлерінде басқаруды 0 сақинасында жұмыс істейтін VxD-ге көшіру үшін шақыруға болатын алыс көрсеткіш бар.[1] 32 биттік қосымшалар, бірақ Windows 95 драйверінің кодына кіру керек болғанда, KERNEL32.DLL құжаттамасыз VxDCall функциясын шақырады, ол қоңырау режимін өзгертетін INT 30h шақырады.

Қазіргі заманғы қолдану

Қазіргі заманғы x86 операциялық жүйелері CALL FAR шақыру қақпаларынан көшуде. X86 нұсқауларын енгізе отырып жүйелік қоңырау (SYSENTER / SYSEXIT - Intel және SYSCALL / SYSRET - AMD), x86 бағдарламалары үшін басқару трансферттері үшін жаңа жылдам механизм ұсынылды. Көптеген басқа архитектуралар қоңырау қақпаларын қолдамайтындықтан, оларды қолдану жаңа нұсқамалардан бұрын да сирек кездесетін, өйткені бағдарламалық жасақтама тоқтатылады немесе тұзақтар қоңырау қақпалары үзілістерге қарағанда едәуір жылдам болса да, портативтілікке артықшылық берілді.

Қоңырау қақпалары SYSENTER / SYSEXIT және SYSCALL / SYSRET нұсқауларына қарағанда икемді, өйткені соңғы екеуінен айырмашылығы, қоңырау қақпалары ерікті артықшылық деңгейінен ерікті (жоғары немесе тең болса да) артықшылық деңгейіне ауысуға мүмкіндік береді. SYS * нұсқауларының жылдамдығы тек басқарудың аударымына мүмкіндік береді сақина 3-тен 0-ге дейін және керісінше.

Қауіпсіздік мәселелері

Жүйелік қауіпсіздікті сақтау үшін жаһандық дескриптор кестесі қорғалған жадта болуы керек, әйтпесе кез-келген бағдарлама өзінің қоңырау қақпасын құра алады және оны артықшылық деңгейін көтеру үшін қолдана алады. Бағдарламалық жасақтамада қоңырау қақпалары қолданылған қауіпсіздік эксплуатациясы, осы қорғаудың айналасында жолдар табылған кезде.[2] Мұның бір мысалы - электрондық пошта құрт Гуронг, пайдалану үшін жазылған Microsoft Windows қоңырау қақпасын орнату үшін DevicePhysicalMemory пайдаланатын операциялық жүйе.[3]

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ Мэтт Пиетрек, Windows 95 жүйелік бағдарламалау құпиялары
  2. ^ Intel SYSRET артықшылығының жоғарылауы Xen жобасының блогы
  3. ^ Құрт: W32 / Gurong. Сипаттама F-Secure Labs