BRUTE AE: 10nova-syscall: Test: Simple tests
Dobrý den, nedaří se mi přijít na kloub této chybě.
Ve FORWARD break to 0x17001
se správně alokuje stránka:
usr virt: 0xf000 // virtual memory usr space address
mapping phys: 0x415000 // physical memory of kernel space address
page: 0xc0015000 // virtual memory kernel space address
V BACKWARD break to 0xf000
size: 0x8001
page count: 8
usr virt: 0xf000
phys: 0x415060
freeing page: 0xc0015060
Se zjistí velikost dealokace, a v cyklu se ruší mapping a dealokují se jednotlivé stránky.
Cyklus začíná stránkou začínající v usr virt: 0xf000
. Volání metody get_mapping(0xf000)
však vrátí adresu ve fyzické paměti, která se od té původní (alokované ve forward breaku) liší o 0x60
. Program se pak kvůli tomu snaží dealokovat špatnou adresu stránky ve virtuální paměti kernel space.
Když stejné příkazy spouštím u sebe z hello.c
, jež používám k testování, tak k chybě nedojde. Nutno však zmínit, že get_mapping()
mi konzistentně vrací fyzickou adresu posunutou o 7 bytů doprava. Tudíž pokaždé, když volám get_mapping()
, tak od výsledku odečítám 7.
Chtěl bych Vás tedy poprosit o radu. Je možné, že jsem špatně pochopil metodu get_mapping()
a odečítání 7 je hloupost? Uvědomuji si, že je to přece jenom trochu hack. Přijde mi však zvláštní, že stejná série volání brk()
mým hello
programem chybu nevyvolá. Možná se s namapováním něco děje během příkazů Reading/Setting memory range
?
Mockrát děkuji za Váš čas, Cyril Janeček
Keep this URL here: https://cw.felk.cvut.cz/brute/data/ae/release/2020z_b4b35osy/10nova-syscall/cviceni/ae/results/results.php?&idg=janeccyr&idu=5947&upload=1003036&result=638802#test-3