Повреждение памяти в Windows Mobile - PullRequest
2 голосов
/ 11 февраля 2009

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

Ответы [ 3 ]

3 голосов
/ 11 февраля 2009

Windows Mobile, по крайней мере во всех текущих воплощениях, построен на Windows CE 5.0 и поэтому использует модель памяти CE 5.0 (которая такая же, как и в CE 3.0). Операционная система на самом деле мало что делает для защиты памяти процесса, но этого достаточно, чтобы обычно не позволяло процессам мешать друг другу. Это не сложно и быстро, хотя.

Процессы CE запускаются в «слотах», из которых их 32. Текущий запущенный процесс обменивается на нулевой слот, а его адреса переопределяются на ноль (поэтому вся память в запущенном процессе фактически имеет 2 адреса, слот Адрес 0 и это ненулевой адрес слота). Эти адреса защищены (хотя существует простой вызов API 1008 * для пересечения границы). Это означает, что повреждения указателя и т. Д. Не будут наступать на другие приложения, но если вы хотите , вы все равно можете.

Также у CE есть концепция общей памяти. Все процессы имеют доступ к этой области, и она на 100% незащищена. Если ваше приложение использует разделяемую память (и менеджер памяти может дать вам общий адрес без вашего ведома, в зависимости от вашего распределения и его размера). Если у вас есть общая память, то да, любой процесс может получить доступ к этим данным, включая их повреждение, и вы не получите ни ошибки, ни предупреждения ни в одном из этих процессов.

1 голос
/ 11 февраля 2009

Несмотря на то, что ответ ChrisW технически верен, мой опыт работы с Windows Mobile заключается в том, что гораздо проще вывести из строя все устройство из приложения, чем на рабочем столе. Я мог догадаться по нескольким причинам, почему это так;

  • Операционная система часто намного тяжелее OEM-производителя, чем рабочий стол Windows, то есть количество низкоуровневого кода, специфичного для производителя, может быть очень высоким, что приводит к ошибкам, специфичным для производителя, на уровне, который может привести к серьезным сбоям. На многих устройствах часто встречается новая версия прошивки каждый месяц или около того, где исправления исправляют такие ошибки.

  • Ресурсы ограничены, и приложение, которое исчерпывает все доступные ресурсы, может вызвать сбой.

  • Механизмы защиты и архитектура сильно различаются. Устройство, с которым я сейчас работаю, основано на SH4, в то время как вы в основном видите ARM, X86 и странный процессор MIP. ..

1 голос
/ 11 февраля 2009

Защищает ли операционная система WM память процесса друг от друга?

Да.

Может ли одно плохо написанное приложение аварийно завершить работу другого приложения, просто ошибочно записавшего в первую память?

Нет (но это может сделать и другие вещи, такие как использование всего дискового пространства).

Даже если вы драйвер устройства, чтобы получить разрешение на запись в память, принадлежащую другому процессу, есть API, который вы должны явно вызывать.

...