Portál AbcLinuxu, 31. října 2025 09:06
 13.11.2008 19:15
kozzi             | skóre: 55
             | blog: vse_o_vsem
             | Pacman (Bratrušov)
        13.11.2008 19:15
kozzi             | skóre: 55
             | blog: vse_o_vsem
             | Pacman (Bratrušov)
         
             13.11.2008 21:07
kozzi             | skóre: 55
             | blog: vse_o_vsem
             | Pacman (Bratrušov)
        13.11.2008 21:07
kozzi             | skóre: 55
             | blog: vse_o_vsem
             | Pacman (Bratrušov)
         16.11.2008 15:58
Luk             | skóre: 47
             | blog: Kacířské myšlenky
             | Kutná Hora
        16.11.2008 15:58
Luk             | skóre: 47
             | blog: Kacířské myšlenky
             | Kutná Hora
        Kdyz pouzijete int80 tak se ocitnete v kernelu a nemuzete vlastne pouzivat stack ani menit hodnoty vetsiny registru. V kernelu musite nejdrive "odzalohovat" userspace veci a teprve potom muzete obslouzit userspace pozadavek. syscall nebo sysenter je implementovan tak, ze snad umoznite kernelu aby mohl alespon na chvili pouzit kus vaseho stacku, aby mel kam ulozit vase registry.Userspace registry se zálohují ještě před vyvoláním přechodu do kernelu. Pak už jsou v registrech jen parametry systémového volání (resp. u x86 je to v jednom případě mírně jinak, protože jeden registr chybí - tam se ten poslední parametr dává na stack). V kernelu se pak registry opět uloží. Rozdíl mezi metodou instrukce a int80 je v tom, že v prvním případě není potřeba nic explicitně nastavovat, postará se o to instrukce.
Nekde vysoko v pameti je namapovana stranka, na kterou se skace pokazde kdyz volate nejaky syscall. Ta stranka obsahuje vsechny instrukce/data potrebne pro komunikaci s kernelem.Ta stránka (VDSO) má dva významy. Jeden je kvůli problémů s nedostatkem registrů u x86 (je tam kód, který se stará o to, aby se správně nakládalo s registry ESP a EBP při hacku použitém na přenos šestého parametr syscallu). Druhý význam jsou virtuální volání (na x86_64), kde v některých případech (getpid(), getcpu()...) vůbec není potřeba zabíhat do jádra, lze to udělat v uživatelském prostoru.
int 0x80zavolas
syscallnice and simple
 
             13.11.2008 21:06
kozzi             | skóre: 55
             | blog: vse_o_vsem
             | Pacman (Bratrušov)
        13.11.2008 21:06
kozzi             | skóre: 55
             | blog: vse_o_vsem
             | Pacman (Bratrušov)
         15.11.2008 16:29
Grunt             | skóre: 23
             | blog: Expresivní zabručení
             | Lanžhot
        15.11.2008 16:29
Grunt             | skóre: 23
             | blog: Expresivní zabručení
             | Lanžhot
         15.11.2008 17:23
kozzi             | skóre: 55
             | blog: vse_o_vsem
             | Pacman (Bratrušov)
        15.11.2008 17:23
kozzi             | skóre: 55
             | blog: vse_o_vsem
             | Pacman (Bratrušov)
         15.11.2008 17:31
Grunt             | skóre: 23
             | blog: Expresivní zabručení
             | Lanžhot
        15.11.2008 17:31
Grunt             | skóre: 23
             | blog: Expresivní zabručení
             | Lanžhot
        $ ldd `find /bin/ -executable` | grep "linux-gate.so" | wc -l
93
$ find /bin/ -executable | wc -l
121
 15.11.2008 18:10
kozzi             | skóre: 55
             | blog: vse_o_vsem
             | Pacman (Bratrušov)
        15.11.2008 18:10
kozzi             | skóre: 55
             | blog: vse_o_vsem
             | Pacman (Bratrušov)
         15.11.2008 18:18
kozzi             | skóre: 55
             | blog: vse_o_vsem
             | Pacman (Bratrušov)
        15.11.2008 18:18
kozzi             | skóre: 55
             | blog: vse_o_vsem
             | Pacman (Bratrušov)
         15.11.2008 20:00
David Watzke             | skóre: 74
             | blog: Blog...
             | Praha
        15.11.2008 20:00
David Watzke             | skóre: 74
             | blog: Blog...
             | Praha
         Používá to jen mbchk z grubu...
 Používá to jen mbchk z grubu...
            
        Tiskni
            
                Sdílej:
                 
                 
                 
                 
                 
                 
            
    
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.