2013-03-07 4 views
0

Возможно, это действительно глупый вопрос, но может ли кто-нибудь объяснить, почему нельзя было писать код сборки для запуска системных функций или управления оборудованием? Например, было бы невозможно написать код для включения/выключения экрана или даже телефона устройства?Код сборки для системных функций (iPhone)

Я не говорю о джейлбрейке устройства или о приложении для магазина приложений. Обычное приложение со сборкой для вызова системных функций.

Если возможно, у кого-то есть хорошая рекомендация или отправная точка для достижения таких задач?

Thanks

+0

Возможно использование Android NDK. – user1929959

+0

жаль, что вы пропустили заголовок iPhone ... – George

+0

Я подозреваю только операционную систему iPhone. – user1929959

ответ

2

iPhones использует защищенную память операционную систему, в которой каждый пользовательский процесс содержится в своем собственном адресном пространстве виртуальной памяти. Адресное пространство защищено аппаратным модулем управления памятью (MMU) и пытается получить доступ к памяти за пределами регионов, переданных процессу ОС, приведет к исключению. ОС резервирует диапазоны аппаратной памяти для себя и не делает ее доступной для пользовательских процессов. Таким образом, невозможно напрямую взаимодействовать с оборудованием из пользовательского процесса.

1

Конечно, можно вызвать системные функции из кода сборки. И как вы думаете, что делает приложение C или C++? Он делает именно это. C/C++ и ассемблерный код в конечном итоге преобразуют (во время компиляции) в машинный код, выполняемый ЦП.

Я не знаю, где было бы руководство для подобных действий, но вы, безусловно, можете запустить программу C в отладчике и посмотреть, как она вызывает различные системные функции, или вы можете разобрать эту программу и прочитать разборку без запуск программы в отладчике.

В любом случае вы не получите больше контроля над устройством из программы, написанной на сборке, чем из программы, написанной на C. OS должна ограничить прямой доступ к определенным устройствам ввода/вывода и областям памяти на уровне ЦП , где нет разницы между сборкой и C, это все равно для CPU, всего лишь набор инструкций в машинный код.

+0

. Обратите внимание, что песочница и многие другие ограничения, кроме той, которую вы отмечаете, не позволяют этим функциям делать то, что они фактически должны делать (это по соображениям безопасности). Кроме того, объективный c на самом деле является всего лишь c-кодом, ничего необычного в этом нет, когда вы входите в его внутренности. – DanZimm

+0

Я, возможно, очень глупый или наивный. Вернувшись в «старые времена», я знал, что для установки аппаратных флагов/адресов вы можете управлять оборудованием. То есть. вытащите лоток для компакт-дисков через заданный вызов памяти. Теперь, игнорируя ОС, эти вызовы обязательно лежат где-то в области памяти, так что ОС также может их вызывать. Я предполагаю, что накладные расходы на определение вызывающего абонента этих вызовов просто не являются жизнеспособными на уровне сборки, так что опять же, почему кто-то не сможет их выполнить? Единственное, о чем я могу думать, это ядро, которое не позволяет это, но вы не делаете вызовы ядра ... Извините, я мог что-то упустить. – George

+1

Еще в старые времена, процессоры были ... немыми.В наши дни процессоры общего назначения имеют различные функции защиты и безопасности, и ОС может настроить ЦП на неограниченный доступ ко всему для себя и ограниченный доступ для приложений пользовательского уровня. Чаще всего это означает, что существует набор подмножеств набора команд CPU, который может выполнять только ОС, и ОС настраивает MMU (обычно, таблицы страниц) таким образом, что только определенные области памяти могут быть прочитаны и выполнены и записаны в по приложениям. –

Смежные вопросы