Pull to refresh

Comments 2

Ох и забористая статья. Написано еще запутаннее чем в Intel SDM Vol3. Chapter 4.5 :)

Я немного не понял как трансляция виртуального в физический адрес в случае рекурсии работает в граничных случаях:
Вот например это наш адрес:
image

Если запись №511 таблицы PML4 содержит в себе адрес начала самой себя, то мы идеем по этому адресу, считая что уже работаем с уровнем PDT, повторяем так все 4 раза до посинения и?
В итоге меем физический адрес 4Кб страницы, который соответствует началу нашей PML4, прибавляем к нему offset, который не может превышать эти самые 4Кб, но и PML4 занимает 4кб?! т.е. наш виртуальный адрес транслируется куда-то вовнутрь PML4 и любые действия на запись затирают ее.
Это, скажем, будет работать если индекс для PT (level1.) будет содержать значение отличное от 511, но для адреса из примера:
структура: 0o_SSSSSS_RRR_RRR_RRR_RRR_AAAA
адрес: 0o_177777_777_777_777_777_0000

мы попадаем ровно в начало PML4 и гарантированно испортим ее.
Так и задумано. Это для возможности модифицировать PML4.
Sign up to leave a comment.

Articles

Change theme settings