Повреждение памяти Windows Mobile
Является ли операционная система WM защищает память процессов друг от друга? Может ли одно плохо написанное приложение разбить какое-то другое приложение, просто ошибочно написав поверх первой памяти?
3 ответа:
Windows Mobile, по крайней мере во всех текущих воплощениях, построена на Windows CE 5.0 и поэтому использует модель памяти CE 5.0 (которая такая же, как и в CE 3.0). На самом деле ОС не делает много для защиты памяти процессов, но она делает достаточно, чтобы вообще не мешать процессам друг другу. Но это не трудно и не быстро.
Процессы CE выполняются в "слотах", которых 32. Текущий процесс переключается на нулевой слот, и это адреса пересчитываются на ноль (таким образом, вся память в запущенном процессе фактически имеет 2 адреса, адрес слота 0 и ненулевой адрес слота). Эти адреса обрабатываются (хотя есть простой вызов API для пересечения границы). Это означает, что повреждения указателя и т. д. не будут наступать на другие приложения, но если вы Хотите, Вы все еще можете.
Также CE имеет понятие общей памяти. Все процессы имеют доступ к этой области, и она на 100% незащищена. Если ваше приложение использует общую память (и менеджер памяти может дать вам общий адрес без вашего специального запроса, в зависимости от вашего распределения и его размера). Если у вас есть общая память, то да, любой процесс может получить доступ к этим данным, включая их повреждение, и вы не получите ни ошибки, ни предупреждения в любом процессе.
Является ли операционная система WM защищает память процессов друг от друга?
Да.
Может ли одно плохо написанное приложение разбить какое-то другое приложение, просто по ошибке записав поверх первой памяти?
Нет (но он может делать и другие вещи, например, использовать все "дисковое" пространство).
Даже если вы являетесь драйвером устройства, чтобы получить разрешение на запись в память, принадлежащую другому процессу, существует API, который вы должны вызвать явно.
Хотя ответ ChrisW технически верен, мой опыт работы с Windows mobile заключается в том, что гораздо проще разбить все устройство из приложения, чем на рабочем столе. Я мог бы догадаться о нескольких причинах, почему это так;
Операционная система часто гораздо более загружена, чем рабочий стол Windows, то есть количество кода низкого уровня производителя может быть очень высоким, что приводит к ошибкам производителя на уровне, который может привести к плохим сбоям. На многие устройства обычно видят новую версию прошивки каждый месяц или около того, где изменения являются исправлениями таких ошибок.
Ресурсов становится все меньше, и приложение, исчерпывающее все доступные ресурсы, может привести к сбою.
Механизмы защиты и архитектура сильно различаются. Устройство, с которым я сейчас работаю, основано на SH4, в то время как вы в основном видите ARM, X86 и нечетный процессор MIPs..