2004-gre-cs-practice-book.pdf/Q56 — различия между версиями
Материал из DISCOPAL
StasFomin (обсуждение | вклад) (Новая страница: « == Вопрос: Q56-4c9f66 == <i>Тут вставьте перевод вопроса. Используйте [https://wiki.4intra.net/Help:%D0%A4%D0%BE%D1%80…») |
StasFomin (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | |||
== Вопрос: Q56-4c9f66 == | == Вопрос: Q56-4c9f66 == | ||
− | + | * Предположим, что отладчик устанавливает точку останова на инструкции загрузки по виртуальному адресу 0x77E81234 в отлаживаемом процессе ''P''. | |
− | + | * Если текстовый сегмент ''P'' начинается по адресу с 0x77E80000 в виртуальном адресном пространстве ''P'' и если отладчик сопоставил этот же текстовый сегмент на 0x010000000 в своем виртуальном адресном пространстве | |
− | + | ||
− | + | Какой из следующих виртуальных адресов используется отладчиком в операции '''ЗАПИСИ''', а также описание того, как отладчик сопоставил страницу виртуальной памяти, содержащую этот адрес? | |
=== Ответы === | === Ответы === | ||
− | + | * Правильный ответ: 0x01001234; страница памяти мапится с доступом READ/WRITE | |
− | + | * 0x01001234; страница памяти мапится с доступом COPY-ON-WRITE | |
+ | * 0x76E81234; страница памяти мапится с доступом READ/WRITE | ||
+ | * 0x76E81234; страница памяти мапится с доступом COPY-ON-WRITE | ||
+ | * 0x77E81234; страница памяти мапится с доступом READ/WRITE | ||
− | + | === Объяснение === | |
− | + | {{cstest-source|2004-gre-cs-practice-book.pdf|38|56}} | |
− | + | ||
− | + | ||
− | + | ||
− | |||
− | |||
− | |||
+ | Step 1: Calculate the Offset of the Breakpoint Address | ||
− | == | + | * Так, оффсет бряки 0x77E81234−0x77E80000=0x1234 |
− | + | ** в пространстве отладчика оно в 0x01000000+0x1234=0x01001234 | |
− | + | * Вот дальше, по моему опыту отладчиков (gdb, ddd, SoftICE, Ghidra…) нормальный READ/WRITE доступ есть (хоть код на ходу правь). | |
+ | |||
+ | Но! Очевидно в каких-то случаях дебаггер маппит COPY-ON-WRITE, и если вы разбираетесь в теме и напишите обьяснение, когда и как оно мапиится — велком! | ||
− | + | {{question-ok|[[Участник:StasFomin|StasFomin]] 23:39, 15 декабря 2024 (UTC)}} | |
− | + | [[Категория:Виртуальная память]] | |
+ | [[Категория:Разобраться]] |
Версия 23:39, 15 декабря 2024
Вопрос: Q56-4c9f66
- Предположим, что отладчик устанавливает точку останова на инструкции загрузки по виртуальному адресу 0x77E81234 в отлаживаемом процессе P.
- Если текстовый сегмент P начинается по адресу с 0x77E80000 в виртуальном адресном пространстве P и если отладчик сопоставил этот же текстовый сегмент на 0x010000000 в своем виртуальном адресном пространстве
Какой из следующих виртуальных адресов используется отладчиком в операции ЗАПИСИ, а также описание того, как отладчик сопоставил страницу виртуальной памяти, содержащую этот адрес?
Ответы
- Правильный ответ: 0x01001234; страница памяти мапится с доступом READ/WRITE
- 0x01001234; страница памяти мапится с доступом COPY-ON-WRITE
- 0x76E81234; страница памяти мапится с доступом READ/WRITE
- 0x76E81234; страница памяти мапится с доступом COPY-ON-WRITE
- 0x77E81234; страница памяти мапится с доступом READ/WRITE
Объяснение
Исходники — вопрос 56 на 38 странице книги «2004-gre-cs-practice-book.pdf»
Step 1: Calculate the Offset of the Breakpoint Address
- Так, оффсет бряки 0x77E81234−0x77E80000=0x1234
- в пространстве отладчика оно в 0x01000000+0x1234=0x01001234
- Вот дальше, по моему опыту отладчиков (gdb, ddd, SoftICE, Ghidra…) нормальный READ/WRITE доступ есть (хоть код на ходу правь).
Но! Очевидно в каких-то случаях дебаггер маппит COPY-ON-WRITE, и если вы разбираетесь в теме и напишите обьяснение, когда и как оно мапиится — велком!