ntdll.dll
ei ole missään mielessä etuoikeutettu, eikä se voi tehdä mitään, mitä käyttäjätilan kirjasto ei voi. Joten ei, sillä ei ole "lupaa", soita suoraan ytimen moodikoodiin, eikä se tee niin.
Se tarkoittaa, että se kulkee ytimen tarjoaman erityisen käyttöliittymän läpi käyttäjän vastaanottamiseksi -tilan puhelut. Versiosta ja suorittimesta riippuen ntdll
-funktiot lataavat pari rekisteriä (a) numerolla, joka edustaa pyydetyn operaation tunnusta, ja (b) pinon osoitteella, joka sisältää argumentteja tätä toimintoa varten. Se tekee jotain erityistä (katso alla), joka saa CPU: n siirtymään ydintilaan ja aloittamaan järjestelmän puheluiden aloituskohdan.
Tämä koodi on pohjimmiltaan kytkin käsky hakemistossa, joka kutsuu oikean sopivan kernel-mode-funktion (ja kopioi argumentit).
"Jotain erityistä" ntdll
tekee joko kutsun ohjelmiston keskeytykseen ( int 0x2e
) tai nykyaikaisissa Windows-versioissa käytä järjestelmäkutsuihin erikoistuneita ohjeita ( syscall
tai sysenter
). Mitä molemmat näistä asioista tekevät, on siirtyminen renkaaseen 0 ja aloittaa tietyn osoitteen suorittaminen tietystä pinosta. Erona on, että keskeytyksen lähettäminen edellyttää muistiin tallennetun taulukon (IDT) tutkimista, kun taas erikoistuneet ohjeet eivät.
Siellä taika tapahtuu. Mikään ei todellakaan estä sinua valmistelemasta oikeita argumentteja pinossa, lataamasta eax- ja edx-tiedostoja oikeilla arvoilla ja suorittamalla int 2e
(tai sopivia juttuja x64: lle).