Функция C++ для "проверки памяти ядра" перед доступом
Я разрабатываю простой драйвер устройства для изучения. С большим количеством тестов я создаю так много ошибок, которые в конечном итоге приводят мой компьютер к синему экрану. Я уверен, что причина этого-сбой памяти. Поэтому теперь я хочу проверить, может ли мой код получить доступ к памяти ядра, прежде чем идти дальше.
Мой вопрос заключается в том, какая функция может проверить, доступна ли она в памяти ядра или нет. Например, есть структура указателя с двумя полями, и я хочу получить доступ к первому полю, которое также является указателем, но теперь знаю, действительно ли оно имеет доступное значение или просто мусорное значение.
В данном контексте мне нужно проверить это, чтобы убедиться, что я не получаю синий экран.
Заранее спасибо!
Что я уже пробовал:
-------------------------------------------------------------
Richard MacCutchan
В режиме ядра это сделать трудно, так как у вас есть доступ к памяти ядра, поэтому легко выбросить систему. Вам просто нужно сделать больше настольной проверки вашего кода. Существуют различные инструменты анализа кода; проверьте через Google.
MinYoung Lee
Да, я должен.. Я все еще пытаюсь понять, и я забыл упомянуть, какую ОС, язык я использую. Это C++, Windows7.
Dave Kreskowiak
В режиме ядра вы можете идти куда угодно и делать что угодно, так что же такое "недопустимый" в этом контексте? Ничего...
MinYoung Lee
Да, Дейв Кресковяк, вы правы. Поэтому я подумываю о том, чтобы установить диапазон памяти ядра, чтобы увидеть, является ли он допустимым или имеет доступные значения. Я новичок в этом программировании ядра, чувствую себя действительно сложным, но интересным.
Dave Kreskowiak
Ты смотришь на это неправильно. Поскольку в ядре все допустимо и доступно, дело не столько в том, что вы не можете получить значение, сколько в том, что вы получаете значение, которое не имеет смысла для вашего кода, что и вызывает сбой.
Вы можете думать, что ваш указатель верен, когда он на самом деле указывает на что-то другое, чего вы не ожидали, возвращая значение, которого не ожидал ваш код, работая над этим значением, что приводит к сбою.
MinYoung Lee
Да, я полностью с вами согласен. Вчера я потратил много времени, чтобы исправить эту проблему, и наконец выяснил, что было не так с моим кодом. Это было именно то, что вы говорите. Все, что мне нужно было сделать, это просто проверить, указывает ли мой указатель на правильное значение или нет.