Кіріспе

Сызық ақпарат блогы (TIB) немесе Сызық орта блогы (TEB) — x86 архитектурасындағы Win32 жүйесінде қазіргі уақытта жұмыс істеп тұрған сызық туралы ақпаратты сақтайтын дерек құрылымы. Ол OS/2 жүйесіндегі ұқсас құрылымнан туындаған және 32 биттік жүйелерде онымен кері үйлесімді. TIB Win32 API-ын шақырмастан процесс туралы көптеген ақпаратты алуға мүмкіндік береді. Мысалдар: GetLastError және GetVersion функцияларын эмуляциялау, PEB көрсеткіші арқылы импорт кестелеріне (IAT), процесс басталу аргументтеріне, бейне атауына және басқа да деректерге қол жеткізу. Ол 32 биттік Windows жүйесінде FS сегменттік тіркегіштен, ал 64 биттік Windows жүйесінде GS сегменттік тіркегіштен қол жетімді.

TIB-де сақталатын стек ақпараты

Процесс өзінің жіптерінің стегін жылжытуға еркін болуы керек, егер ол TIB-де сақталған ақпаратты тиісінше жаңартса. Бұл мәселеде бірнеше өріс маңызды: стек негізі, стек шегі, деаллокация стегі және кепілдендірілген стек байттары, тиісінше 64 биттік оффсеттерде 0x8, 0x10, 0x1478 және 0x1748 сақталады. Windows ядросының әртүрлі функциялары осы мәндерді оқиды және жазады, әсіресе стек асығуын басқа оқу/жазу беттерінен ажырату үшін (кепілдендірілген стек байттары шегіндегі стекке оқу немесе жазу қолжетімділік бұзудың орнына стек асығу қатесін тудырады). Деаллокация стегі маңызды, өйткені Windows API қорғалған беттердің мөлшерін өзгертуге мүмкіндік береді: SetThreadStackGuarantee функциясы ағымдағы кеңістікті оқуға және оны кеңейтуге мүмкіндік береді. Оны оқу үшін ол GuaranteedStackBytes өрісін оқиды, ал кеңейту үшін стек беттерін босату қажет. DeallocationStack-ті орнатпастан стек шектерін орнату, SetThreadStackGuarantee-де күлкілі мінез-құлыққа әкелуі мүмкін. Мысалы, ол стек шектерін дұрыс емес мәндерге жазады. Әртүрлі кітапханалар SetThreadStackGuarantee функциясын шақырады, мысалы, NET CLR оны өзінің жіптерінің стегін орнату үшін пайдаланады.