porad se mi nejak nedostava casu a odhodlani soucasne, tak abych si procet, jak je to vlastne napsany, takze prosim o to, aby ste me opravili, pokud se nekde krute seknu
I
docela dost linuxovych stroju je na x86, takze kam az mi pamet saha, tak linux a moduly bezi v ring 0 a uzivatelsky procesy v ring 3.
II
zpristupneni systemovych volani v userspace (1. rozhranni k jadru) by asi mohly byt realizovany pomoci deskriptoru brany v ldt/gdt toho ktereho procesu (brana s pravy ring 3 ukazujici na ring 0 deskriptor spustitelne stranky:offsetu).
III
2. vrstva k rozhranni jadra by asi byly kanaly(vsechny typy souboru) v podobe souboru proc, netlinku, atd. ktery ovsem k vytvoreni a fungovani potrebuji spolupraci jadra.
IV
neni mi moc jasny, na kolika mistech, jak a jestli se vubec pouziva sdilena pamet jadra a userspace, ale jestli jo, tak je to 1.5-ta vrstva?
V
proces-proces je asi prace ipc syscallu a kanalu podonych 2. vrstve k jadru
VI
no a neopravnene ziskavani je asi bud pres syscally donutit jadro aby udelalo nejakou blbost nebo pres zpracovani kanalu proces-jadro nebo proces-proces donutit druhy konec s vetsimi pravy udelat nejakou blbost.
VII
no a ted by me zajimalo co vlastne v tomdle scenari dela lids a co rsbac a co skutecne medusa? kam se kdo povesi o co jsou schopny ohlidat.
VIII
medusa hadam vlozi svuj kod misto puvodnich syscall-u a ty degraduje na obycejne interni funkce, ktere zavola jen v pripade, ze tomu nastaveni odpovida, tedy brany z ring 3 do ring 0 ukazuji na volani implementovane medusou a dovoli tak naprogramovat si libovolne restrikce, pokud se s tim nekomu chce parat - i kdyz uplne nejradi bych asi v nekterych situacich videl vymazani brany k spustitelnemu ofsetu v ring 0 z ldt a nechat proces bez milosti a moznosti pokracovat padnout(kdo vi jestli to meduza dela?)
IX
a dalsi co me zajima, jestli je nektery z techto patchu schopen pracovat s otevrenyma kanalama(vsechny typy souboru, pripadne i to co bude asi technicky nemozne - sdilenou pameti) a detekci stavu budoucich chyb pri zpracovani obsahu techto kanalu. podle toho co jesm slysel o lids by to mohl byt ten pravy bastl, ktery se tim pro konkretni zname pripady snad okrajove zabyva - trefil jsem se aspon priblizne? (+ asciarmor + stackguard a bylo by vystarany?)
II Kdepak, pro syscall se pouziva interrupt, konkretne 0x80.
III /proc, /dev a podobne nejsou nic jineho nez
dohoda o tom jak do syscallu read/write vrazit funkcnost navic.
IV Myslim ze pouze ve funkcich copy_from_user a copy_to_user ... kazdopadne VZDY je to ze strany kernelu
V proces-proces je mozne realizovat tunou zpusobu. IPC, pojmenovane sockety, fork, ... vite ze pres socket jde poslat file descriptor ?
VI Nejcasteji jde o kanaly proces-proces, presneji fork.
VII Predpokladam ze prepisuji syscally.
VIII Neni to presne, obvykle se nahrazuji funkce, tj syscall zavola to same misto, ktere po par detailech v assembleru skoci na funkci z tabulky. A tuto tabulku lids/meduza meni, alespon to predpokladam.
Vis ze exit je syscall ? Nejak jsem nepochopil co dosahnes odpojenim procesu od kernelu. Co ho misto toho ukoncit ?
IX Jak jsem rikal, sdilena pamet se pouziva pouze ze strany kernelu a vsechny soubory jedou pres syscally. Tedy no problem, pokud jsem pochopil.