| Предыдущий | Следующий |
| kOSReturnError | KERN_PROTECTION_FAILURE |
KERN_INVALID_ADDRESS
KERN_INVALID_ADDRESS — это результат подсистемы виртуальной памяти Mach. Адрес, переданный операции, недопустим в текущей карте адресов целевой задачи. Это не то же самое, что POSIX EFAULT, возвращаемый высокоуровневым API, хотя оба результата часто указывают на недопустимый диапазон памяти.
Важно различать адрес без пригодного отображения и адрес, который отображён, но имеет недостаточные права доступа. Для второго случая XNU использует KERN_PROTECTION_FAILURE. Это различие существенно при диагностике неудачной операции mach_vm_*, отладчика или кода, работающего с другим процессом: изменение защиты страниц не может устранить разрыв в карте адресов.
Что проверить
- Убедитесь, что порт задачи относится к нужной и всё ещё активной задаче.
- Проверяйте весь диапазон, а не только его первый байт: запрос может пересекать границу неотображённой области.
- Повторно проверяйте адреса, полученные ранее. Область могла быть удалена из карты, заменена или стать недоступной до последующего вызова Mach.
- При выделении памяти по фиксированному адресу убедитесь, что запрошенные адрес и длина соответствуют текущей карте целевой задачи.
В модели Mach каждая задача владеет разреженным виртуальным адресным пространством. Интерфейс VM управляет этой картой; числовой адрес имеет смысл только в соответствующей задаче и только пока его отображение существует.
Ссылки
- XNU: kern_return.h
- Руководство Apple по программированию ядра: обзор Mach
- Справочное руководство GNU Mach: интерфейс виртуальной памяти
Нужно найти другой код? Найти другой код состояния или ошибки.