rt_sigaction(SIGSEGV, SIG_DFL...) rt_sigaction(SIGSEGV, 0xf7f758ed, ...) openat(„./_test/inputs/inv_perm”) read (header)... și close openat iar (tura asta al meu) --Primul SIGSEGV la 0x804801c -> mincore (-1 ENOMEM – am continuat și am mapat – cu el verific dacă nu cumva e deja ceva la adresa aia) -> mprotect (READ, WRITE) – hack pentru secțiunile mai mici decât pagina – pun eu zerouri -> mprotect(READ, EXECUTE) – permisiunile originale din secțiune rt_sigreturn (mă rog) --SIGSEGV la 0x80480c0 -> Aparent lipsește al doilea apel la mincore, aproape de crash-ul dorit? -> rt_sigaction(SIGSEGV, SIG_DFL) (metoda mea de a crasha programul cu exact faultul respectiv) -> Final SIGSEGV that actually crashes
https://pastebin.com/CcbJ4WXZ (strace, complet). Există vreun mod de a cauza direct fault din prima (gen nu mai mapez dacă încerc să scriu pe o zonă care nu am voie, deși face parte din unul din segmente?) Sent from Mail for Windows 10 From: Adrian Șendroiu Sent: Tuesday, April 16, 2019 5:35 PM To: Paul-Stelian Olaru; Sisteme de Operare Subject: Re: [so] Incorrect number of faults (test 7, inputs/inv_perm) Ce zice strace ./_test/run_test ./_test/inputs/inv_perm? On Tue, 16 Apr 2019 at 17:07, Paul-Stelian Olaru via so <so@cursuri.cs.pub.ro> wrote: > > Pentru a rezolva faulturi verific dacă a fost deja mapată pagina de memorie. > Dacă nu, o mapez. Dacă da, consider eșec la mapare și declanșez handlerul > salvat la so_init_loader. Perfect, asta îmi dă aproape toate testele chiar, > dar pe testul 7 (inputs/inv_perm) mi se spune că am 2 faulturi în loc de unul > singur. > > > > Este abordarea corectă? De asemenea, există ceva (chiar în acel ucontext pe > care noi îl primim ca void*) care ne va oferi tipul de acces care a generat > faultul? > > > > Sent from Mail for Windows 10 > > > > _______________________________________________ > http://ocw.cs.pub.ro/courses/so/info/lista-discutii
_______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii