Повреждение памяти Windows Mobile


Является ли операционная система WM защищает память процессов друг от друга? Может ли одно плохо написанное приложение разбить какое-то другое приложение, просто ошибочно написав поверх первой памяти?

3 2

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..