Root c что это

от admin

Что такое root-доступ и как его получить на Android

Многие из нас слышали выражения, подобные этим: “root”, “рутануть”, “получить рут”. В основном, этими словами оперируют бывалые пользователи Android-смартфонов на специализированных форумах, а простого юзера фраза “это приложение работает только под рутом” порой вводит в ступор и недоумение. Попытки погуглить и узнать, что такое рут, приведут вас на специализированные форумы, где вменяемого ответа вам не дадут, а лишь отправят читать ветку из 600 постов. Что ж, я попытаюсь помочь в этом вопросе.

Root — это фактически права супер-пользователя

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

Что такое root

Что такое root. Рут снимает все ограничения на взаимодействие с ОС. Фото.

Рут снимает все ограничения на взаимодействие с ОС

Root — это особая учетная запись в любой UNIX-подобной системе c супер-правами. Благодаря ей пользователь получает права на выполнение абсолютно любых манипуляций с ОС.

Зачем нужен root? Ну, он наделяет вас неограниченными правами выполнять любые операции в системе, по сути, приравнивая к её создателю. Грубо говоря, пользователь с root-правами может делать с устройством практически все, что угодно. Еще один момент, на который хочется обратить ваше внимание — это то, что root можно встретить не только на смартфонах, но и в любой системе, которая работает на ядре UNIX. Таким образом, вы — само собой, при должном умении — сможете даже получить root на роутере.

Если не вдаваться в нудные технические подробности, то запущенные от имени root-пользователя приложения имеют неограниченные права на доступ к любым данным в системе. В основном, конечно, рут-права нужны разработчикам. Благодаря им они создают прекрасные приложения, которые помогают простому пользователю и делают работу с системой удобнее и проще. За примерами далеко ходить не будем, сервис Titanium Backup, который может сделать бэкап всех данных на смартфоне, работает только с root-правами.

Кроме Titanium Backup, существует целая когорта полезных приложений для тонкой настройки устройства и каждый сам найдет для себя полезный софт. Помимо софта рут позволяет более тонко настроить свое устройство. Так, например, можно заменить графику в графическом интерфейсе системы и если вас достали, допустим, какие-либо элементы интерфейса, значки или их цвет, их можно заменить с помощью специализированного софта или твиков. То же самое относится и к функциональным параметрам системы.

Зачем нужен root

Зачем нужен root. Многие защищённые приложения вроде Сбербанк Онлайна могут перестать работать на рутированном устройстве. Фото.

Многие защищённые приложения вроде Сбербанк Онлайна могут перестать работать на рутированном устройстве

Вот несколько ключевых параметров, которые позволяет изменить рут, понятные даже рядовому пользователю:

  • Увеличить максимальную громкость динамиков или наушников;
  • Откалибровать датчики освещенности;
  • Изменить интенсивность вибрации смартфона;
  • Увеличить или уменьшить максимальный и минимальный уровни яркости дисплея;
  • Отключить сжатие фото в JPEG и увеличить качество фото с камеры;
  • Удалить всю рекламу из системы и приложений, включая YouTube;
  • Удалить неудаляемые системные приложения и трекеры;
  • Оптимизировать работу аккумулятора и увеличить автономность смартфона.

Как сделать root-права

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

Практически — потому что существуют обходные способы разблокировки загрузчика с помощью специальных кодов, которые продают сотрудники компаний, выпускающих аппараты. Но, во-первых, стоят они довольно много (около 60-80 долларов), а, во-вторых, велик риск наткнуться на мошенника, у которого никакого кода, к сожалению, не имеется. Поэтому лучше оставить эту затею.

Впрочем, если ваш смартфон позволяет разблокировать загрузчик, вот вам беглая инструкция на примере OnePlus 9 Pro. С более подробными положениями рекомендую ознакомиться в разделе вашего устройства на 4PDA.

  • Сохраните резервную копию на случай утери данных;
  • Перейдите в «Настройки» — «Для разработчика»;
  • Включите «Заводская разблокировка» и «Отладка по USB»;
  • Скачайте Fastboot/ADB на ПК и подключите смартфон к нему;
  • Запустите ADB, напишите в адресной строке cmd и нажмите Enter;

Как сделать root-права. Если скачиваете непропатченный файл boot.img, его потребуется пропатчить. Фото.

Если скачиваете непропатченный файл boot.img, его потребуется пропатчить

  • Затем пропишите в консоли adb devices, чтобы убедиться, что она видит ваш смартфон;
  • Согласитесь с отладкой и пропишите в консоли adb reboot bootloader;
  • Если вас перебросило в меню, то выберите english — advanced — reboot to fastboot;
  • Пропишите в консоли fastboot oem unlock, а на смартфоне кнопками громкости выберите unlock the bootloader и нажмите кнопку power;
  • Скачайте и установите Team Win Recovery Project (для каждого устройства свой);
  • Установите приложение Magisk, а затем, следуя инструкции на 4PDA, завершите процедуру получения рут-прав.

Я специально не даю ссылок, потому что для каждого устройства все файлы и конфигурации, которые нужно скачивать, отличаются. Все необходимые ссылки и инструкции вы найдёте на 4PDA, в разделе, посвящённом вашей модели смартфона. Но учитывайте, что OnePlus 9 и OnePlus 9 Pro — это разные аппараты. Если случайно установить несовместимый файл на несовместимое устройство, получится кирпич.

Стоит ли делать рут

Стоит ли делать рут. Делать рут довольно опасно, да и рядовому пользователю абсолютно незачем. Фото.

Делать рут довольно опасно, да и рядовому пользователю абсолютно незачем

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

Обратной стороной любых прав, в том числе и root, является ответственность. Вы должны понимать, что, получая права супер-пользователя, вы берете на себя ответственность за все те неприятности, которые могут случится с вами и вашим устройством. А неприятностей это может доставить гораздо больше, нежели пользы, особенно, если вы плохо понимаете, как всё устроено.

Приложения, требующие рут-прав, требуют особых навыков взаимодействия с таким софтом. Естественно, им обладают не все, и разработчики включает в абсолютно безвредные с виду приложения вредоносный код и собрать ваши платёжные данные. Про приложения, которые оформляют платные подписки, я вообще молчу.

Но хуже всего, что ведоносное ПО, имеющее доступ к рут-правам, с такими возможностями в теории может вмешиваться даже в работу антивирусных приложений, которые сами такими правами не обладают. Ну да, ладно, не буду пугать вас вирусами, ибо самый страшный вирус находится на расстоянии 20-30 см от девайса и чаще всего держит его в руке. Просто помните, что неопытность, незнание и нежелание разораться, пользователя может нанести больше вреда, чем сам рут.

С помощью root можно угробить телефон и превратить его в кирпич ещё в процессе получения прав супер-пользователя. А вредоносный софт попадает на устройство чаще всего по вине самого пользователя с взломанными игрушками или приложениями. Имея root-права, вредоносный софт способен творить страшные вещи. Поэтому прежде, чем получать их, тщательно взвесьте все плюсы и минусы и хорошенько подумайте, а надо ли оно вам?

Root c что это

5.30/00 (June 28, 2011)

ROOT — пакет объектно-ориентированных программ и библиотек, разработанных в Европейском центре ядерных исследований. Пакет был разработан специально для использования в качестве платформы обработки экспериментальных данных физики высоких энергий и содержит специфичные для этой области продукты, однако также может быть использованы для анализа других данных, например, в астрономии.

Содержание

Описание

CERN поддерживал свою программную библиотеку, написанную на языке Фортран 77; разработка и поддержка была прекращена в 2003 году в пользу ROOT, написанного на C++.

Разработка ROOT была инициирована сотрудниками CERNа Рене Брюном и Фонсом Рэйдмэйкерсом в 1994 году. Некоторые части пакета опубликованы под лицензией LGPL, некоторые — под GPL, таким образом весь проект базируется на свободном программном обеспечении. Он предоставляет кроссплатформенный интерфейс к графической подсистеме и операционной системе используя механизмы абстракции данных. Частями абстрактной платформы являются:

    ,
  • графический интерфейс разработки,
  • классы-контейнеры,
  • система средств самоизменения программ,
  • скриптовый язык на основе C++,
  • командный интерпретатор (CINT), объектов,
  • система долговременного сохранения данных (persistence).

Пакеты, включённые в ROOT, содержат:

  • средства для создания гистограмм и графиков функций для визуализации и анализа вероятностных распределений и функций;
  • средства «подгонки» (фитирования) теоретических кривых под экспериментальные данные и минимизации функций (для подборки наиболее простой зависимости, описывающей экспериментальные данные);
  • инструменты статистического анализа;
  • инструменты матричной алгебры;
  • средства для четырёхвекторных вычислений (четырёхмерное пространство Минковского удобно применяется в физике высоких энергий);
  • стандартные математические функции;
  • инструменты многовариантного анализа данных, то есть использования нейронных сетей;
  • средства обработки изображений, используемые, например, для анализа астрономических снимков;
  • средства доступа к распределённым данным (в контексте таблиц баз данных);
  • инструменты распределённых вычислений, параллелизации обработки данных;
  • средства сериализации и долговременного сохранения объектов;
  • инструменты доступа к базам данных;
  • средства геометрической 3D-визуализации;
  • инструменты для создания файлов в различных графических форматах, таких как PostScript, JPEG, SVG;
  • двусторонние интерфейсы к языкам Python и Ruby (возможности использования средств ROOT из кода на Python или Ruby и использование модулей, написанных на Python или Ruby, из ROOT);
  • интерфейсы к Монте-Карло-генераторам событий физики элементарных частиц.

Ключевой возможностью пакета ROOT является специальный контейнер данных, называемый деревом (Tree), вместе с его подмножествами ветвями (Branch) и листьями (Leaf). Дерево может быть представлено как удобное средство чтения и записи данных в файле. Следующий элемент данных, записанный в файле, может быть получен инкрементированием индекса дерева. Такой подход позволяет избежать проблем с выделением памяти при создании объектов, и даёт возможность дереву выступать в качестве «лёгкого» контейнера при буферизации данных.

ROOT разрабатывался как высокопроизводительная вычислительная библиотека, необходимая для обработки данных Большого Адронного Коллайдера, поток которых достигает нескольких петабайт в год. С 2009 года ROOT используется в подавляющем большинстве экспериментов физики высоких энергий; абсолютное большинство современных результатов и иллюстраций в этой области науки получено именно с использованием ROOT.

Включение в пакет интерпретатора C++ CINT значительно увеличило гибкость пакета, так как позволило использовать средства ROOT в интерактивном режиме или посредством написания скриптов, что сделало его похожим на MATLAB.

Основная критика ROOT связана с утверждениями о том, что для начинающих пользователей достаточно сложно освоить этот продукт, его широкие возможности и средства [1] . Периодически эти проблемы обсуждаются пользователями и разработчиками ROOT в специальном списке рассылки [2] [3] .

Применения ROOT

Многие экспериментальные лаборатории физики высоких энергий используют программное обеспечение, основанное на ROOT, иногда вопреки более стандартным программным решениям (например, использование контейнеров ROOT вместо классов STL).

Программное обеспечение, основанное на ROOT, используется в экспериментах:

    . . .
  • CB-ELSA/TAPS.
  • CDF. .
  • COMPASS.
  • NA61.
  • DZero.
  • H1. .
  • MINOS.
  • PHENIX.
  • PHOBOS.
  • STAR.
  • ZEUS.
  • CRESST.
  • КМД-3. .

Будущие эксперименты, которые на данный момент разрабатывают своё программное обеспечение с использованием ROOT:

Анализ кода ROOT — фреймворка для анализа данных научных исследований

Picture 3

Пока в Стокгольме проходила 118-я Нобелевская неделя, в офисе разработки статического анализатора кода PVS-Studio готовился обзор кода проекта ROOT, используемого в научных исследованиях для обработки больших данных. Премию за такой код, конечно, не дашь, а вот подробный обзор интересных дефектов кода и лицензию для полной проверки проекта разработчики получат.

Введение

Picture 1

ROOT — набор утилит для работы с данными научных исследований. Он обеспечивает все функциональные возможности, необходимые для обработки больших данных, статистического анализа, визуализации и хранения. В основном написан на языке C++. Разработка началась в CERN (Европейская организация по ядерным исследованиям) для исследований по физике высоких энергий. Каждый день тысячи физиков используют ROOT-приложения для анализа своих данных или для моделирования.

PVS-Studio — это инструмент для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, C++, C# и Java. Работает в 64-битных системах на Windows, Linux и macOS и может анализировать код, предназначенный для 32-битных, 64-битных и встраиваемых ARM платформ.

Дебют новой диагностики

V1046 Unsafe usage of the bool’ and ‘int’ types together in the operation ‘&=’. GSLMultiRootFinder.h 175

Бета-версия анализатора, которая использовалась при проверке, нашла вот такую потрясающую ошибку.

Ожидание. Функция SetFunctionList обходит список итераторов. Если хоть один из них будет невалидным, то возвращаемое значение будет false, иначе true.

Реальность. Функция SetFunctionList может возвращать значение false даже для валидных итераторов. Разберёмся в ситуации.Функция AddFunction возвращает количество валидных итераторов в списке fFunctions. Т.е. при добавлении ненулевых итераторов, размер этого списка будет последовательно увеличиваться: 1, 2, 3, 4 и т.д. Вот тут и начнёт проявлять себя ошибка в коде:

Т.к. функция возвращает результат типа int, а не bool, то операция ‘&=’ с чётными числами будет давать значение false. Ведь младший бит чётных чисел всегда будет равен нулю. Следовательно, такая неочевидная ошибка будет портить результат функции SetFunctionsList даже для валидных аргументов.

Picture 2

Ошибки в условных выражениях

V501 There are identical sub-expressions to the left and to the right of the ‘&&’ operator: module && module rootcling_impl.cxx 3650

Начнём с самого безобидного примера. Указатель module проверяется два раза. Скорее всего, одна проверка лишняя. Но код лучше исправить, чтобы не возникало лишних вопросов.

V501 There are identical sub-expressions ‘strchr(fHostAuth->GetHost(), ‘*’)’ to the left and to the right of the ‘||’ operator. TAuthenticate.cxx 300

Тут в строке fHostAuth->GetHost() ищется один и тот же символ — ‘*’. Возможно, одним из них должен быть символ ‘?’. Обычно их используют для задания разных масок.

V517 The use of ‘if (A) <. >else if (A) <. >‘ pattern was detected. There is a probability of logical error presence. Check lines: 163, 165. TProofMonSenderML.cxx 163

Переменная fSummaryVrs дважды сравнивается с нулём. Это приводит к тому, что код в ветви else-if никогда не выполняется. А кода там написано немало…

V523 The ‘then’ statement is equivalent to the ‘else’ statement. TKDTree.cxx 805

Один и тот же copy-paste-код выполняется при любом условии. Возможно, есть опечатка в словах left и right.

Подобного подозрительного кода в проекте немало:

  • V523 The ‘then’ statement is equivalent to the ‘else’ statement. TContainerConverters.cxx 51
  • V523 The ‘then’ statement is equivalent to the ‘else’ statement. TWebFile.cxx 1310
  • V523 The ‘then’ statement is equivalent to the ‘else’ statement. MethodMLP.cxx 423
  • V523 The ‘then’ statement is equivalent to the ‘else’ statement. RooAbsCategory.cxx 394

Скорее всего, тут нет ошибки. Анализатор обнаружил код, который можно сократить. Т.к. значение file_name_value.empty() проверяется в начале цикла, то ниже по коду эту проверку можно убрать, заметно сократив количество ненужного кода.

V590 Consider inspecting the ‘!file1 || c <= 0 || c == ‘*’ || c != ‘(» expression. The expression is excessive or contains a misprint. TTabCom.cxx 840

Рассмотрим сокращённую часть условного выражения, на которое указал анализатор:

Условие не зависит от того, равен символ «звёздочке» или нет. Эта часть условного выражения всегда будет истинна для любого символа, отличного от ‘(‘. В этом легко убедиться, если построить таблицу истинности.

Ещё два места со странной логикой в условных выражениях:

  • V590 Consider inspecting this expression. The expression is excessive or contains a misprint. TFile.cxx 3963
  • V590 Consider inspecting this expression. The expression is excessive or contains a misprint. TStreamerInfoActions.cxx 3084

Ошибка, которую обнаружил анализатор, проявляет себя только при некорректной работе программы. Переменная ret должна хранить код возврата функции AddWorkers и в случае нештатной ситуации выводить это значение в лог. Но код работает не так. В условии не хватает дополнительных скобок, задающих приоритет операций. В переменную ret сохраняется не код возврата, а результат логического сравнения, т.е. только 0 или 1.

Есть ещё одно место с похожим дефектом:

  • V593 Consider reviewing the expression of the ‘A = B < C’ kind. The expression is calculated as following: ‘A = (B < C)’. TProofServ.cxx 3897

Хм… Зачем делать отрицание константного значения kCostComplexityPruning? Скорее всего, символ отрицания случайно добавился и теперь приводит к неправильной логике выполнения кода.

Некорректный код с указателями

V522 Dereferencing of the null pointer ‘pre’ might take place. TSynapse.cxx 61

Я попытался разобраться в этом странном коде. Вроде задумка в том, чтобы не выставлять новое значение полю fpre. Тогда тут допустили ошибку, перепутав указатель, который следует проверить в условии. В текущей реализации, если передать значение nullptr в функцию SetPre, то произойдёт разыменование нулевого указателя.

Читать:
Как скачать плеер на андроид

Скорее всего, правильно так:

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

Вот ещё одно место, которое скопировано отсюда с небольшими изменениями:

  • V522 Dereferencing of the null pointer ‘post’ might take place. TSynapse.cxx 74

Анализатор обнаружил очень опасный код! Указатель N в первом случае разыменовывается без проверки на нулевое значение. Причём обращение к непроверенному указателю и не разглядишь. Это происходит внутри функции shouldVisitDecl.

Традиционно, это диагностическое правило выдаёт много полезных предупреждений. Вот некоторые из них:

  • V595 The ‘file’ pointer was utilized before it was verified against nullptr. Check lines: 141, 153. TFileCacheRead.cxx 141
  • V595 The ‘fFree’ pointer was utilized before it was verified against nullptr. Check lines: 2029, 2038. TFile.cxx 2029
  • V595 The ‘tbuf’ pointer was utilized before it was verified against nullptr. Check lines: 586, 591. TGText.cxx 586
  • V595 The ‘fPlayer’ pointer was utilized before it was verified against nullptr. Check lines: 3425, 3430. TProof.cxx 3425
  • V595 The ‘gProofServ’ pointer was utilized before it was verified against nullptr. Check lines: 1192, 1194. TProofPlayer.cxx 1192
  • V595 The ‘projDataTmp’ pointer was utilized before it was verified against nullptr. Check lines: 791, 804. RooSimultaneous.cxx 791

V571 Recurring check. The ‘if (fCanvasImp)’ condition was already verified in line 799. TCanvas.cxx 800

Указатель fCanvasImp проверяется дважды. Одна из проверок уже реализована в макросе SafeDelete. Одна из проблем с макросами в том, что к ним часто затруднена навигация из кода, поэтому многие не изучают их содержимое перед использованием.

Ошибки при работе с массивами

V519 The ‘Line[Cursor]’ variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 352, 353. Editor.cpp 353

Новое значение элемента Line[Cursor] сразу же перезаписывается. Что-то здесь не так…

V557 Array overrun is possible. The ‘ivar’ index is pointing beyond array bound. BasicMinimizer.cxx 130

Так ошибаться в проверке индекса массива — просто массовая проблема в последнее время. Чуть ли не в каждом третьем проекте встречается. Если при индексации массива в цикле всё просто — почти всегда используется оператор ‘<‘ для сравнения индекса с размером массива, то при такой проверке, как здесь, надо использовать оператор ‘>=’, а не ‘>’. Иначе возможен выход за границу массива на один элемент.

Эту ошибку расплодили по файлу несколько раз:

  • V557 Array overrun is possible. The ‘ivar’ index is pointing beyond array bound. BasicMinimizer.cxx 186
  • V557 Array overrun is possible. The ‘ivar’ index is pointing beyond array bound. BasicMinimizer.cxx 194
  • V557 Array overrun is possible. The ‘ivar’ index is pointing beyond array bound. BasicMinimizer.cxx 209
  • V557 Array overrun is possible. The ‘ivar’ index is pointing beyond array bound. BasicMinimizer.cxx 215
  • V557 Array overrun is possible. The ‘ivar’ index is pointing beyond array bound. BasicMinimizer.cxx 230

Скорее всего, в цикле for хотели сравнивать переменную dim с dm->fArrayDim, а не fArrayDim. Значение используемой переменной — отрицательное, благодаря условию в начале функции. Такой цикл никогда не выполняется.

V767 Suspicious access to element of ‘current’ array by a constant index inside a loop. TClingUtils.cxx 3082

Этот фрагмент кода парсит некую строку и проверяет её корректность. После того, как нулевой символ строки current определяется как число, выполняется обход всех остальных символов, чтобы убедиться, что до конца строки все символы — числа. Ну как выполняется… счётчик цикла i не используется в цикле. Надо было написать current[i], а не current[0] в условии.

Picture 4

Утечка памяти

V773 The function was exited without releasing the ‘optionlist’ pointer. A memory leak is possible. TDataMember.cxx 355

Во время выхода из функции не предусмотрено освобождение памяти по указателю optionList. Нужно ли это в данном конкретном случае — мне сложно сказать. Но обычно такие ошибки исправляют в проектах по отчётам PVS-Studio. Всё зависит от того, должна ли программа пытаться продолжить работать в нештатной ситуации или нет. Таких предупреждений в проекте много, разработчикам лучше перепроверить проект самостоятельно и посмотреть полный отчёт анализатора.

Снова про функцию memset

V597 The compiler could delete the ‘memset’ function call, which is used to flush ‘x’ buffer. The memset_s() function should be used to erase the private data. TMD5.cxx 366

Многие подумают, что когда код скомпилируется, в бинарный файл не попадёт этот комментарий, и будут правы :D. А вот что функция memset тоже будет удалена компилятором, догадываются не все. А это произойдёт. Если очищаемый буфер больше не будет использоваться в коде, то компилятор оптимизирует код и удалит вызов функции. Технически он прав, но если в буфере были секретные данные, то они там и останутся. Это классический дефект безопасности CWE-14.

Разные предупреждения

V591 Non-void function should return a value. LogLikelihoodFCN.h 108

В перегруженном операторе отсутствует возвращаемое значение. Тоже очень распространённая проблема в последнее время.

V596 The object was created but it is not being used. The ‘throw’ keyword could be missing: throw runtime_error(FOO); RTensor.hxx 363

Ошибка заключается в том, что случайно забыто ключевое слово throw. В результате данный код не генерирует исключение в случае ошибочной ситуации.

Всего нашлось два таких места. Второе:

  • V596 The object was created but it is not being used. The ‘throw’ keyword could be missing: throw runtime_error(FOO); Forest.hxx 137

Случай, похожий на те, что были описаны ранее про массивы. Здесь переменная n ограничивается диапазоном значений от 0 до 100. В таком случае существует ветвь кода, в которой произойдет деление на переменную n со значением 0. Скорее всего, ограничение значения n следует переписать таким образом:

V646 Consider inspecting the application’s logic. It’s possible that ‘else’ keyword is missing. TProofServ.cxx 729

Анализатор обнаружил странное форматирование. В одном месте отсутствует ключевое слово else. По коду можно предположить, что код действительно стоит исправить.

И ещё пару мест исправить заодно:

  • V646 Consider inspecting the application’s logic. It’s possible that ‘else’ keyword is missing. TFormula_v5.cxx 3702
  • V646 Consider inspecting the application’s logic. It’s possible that ‘else’ keyword is missing. RooAbsCategory.cxx 604

При работе с классом std::istream недостаточно вызова функции eof() для завершения цикла. В случае возникновения сбоя при чтении данных, вызов функции eof() будет всегда возвращать значение false, а других точек выхода из цикла в этом коде нет. Для завершения цикла в этом случае необходима дополнительная проверка значения, возвращаемого функцией fail():

Или просто написать:

V678 An object is used as an argument to its own method. Consider checking the first actual argument of the ‘Copy’ function. TFormLeafInfo.cxx 2414

Напоследок вот такая опечаточка. Вместо fSizes надо было передать orig.fSizes в функцию Copy.

Заключение

Примерно год назад делался обзор кода проекта NCBI Genome Workbench. Этот проект тоже используется в научных исследованиях, но генома. К чему я веду, программное обеспечение в этой сфере очень важно, но его качеству не уделяют должного внимания.

Кстати, на днях вышла macOS 10.15 Catalina, в которой отказались от поддержки 32-х битных приложений. И в PVS-Studio есть большой набор правил для выявления проблем при портировании программ на 64-х битные системы. Подробнее об этом в посте блога анализатора.

Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Svyatoslav Razmyslov. Analyzing the Code of ROOT, Scientific Data Analysis Framework.

Зачем нужен Root в Android. Плюсы и минусы

Человек хочет свободы. Другое дело, что ему не всегда понятно, зачем оно вообще нужно – некоторые индивидуумы преспокойно могут жить в клетке, отдавая себе об этом отчёт, другим на целом континенте места будет мало. Это зависит от самого человека, от его воспитания, детства, друзей и врагов. Каждый уникален, и каждый идёт по своему пути. Для пользователя смартфона доступ к root-правам– не жизненно важная функция. Это, скажем так, запасной вариант. Есть же пользователи iPhone, которые никогда не делали Jailbreak, и не собираются. И тут дело не в умении, а в нужде. Если ваш карманный друг на Android выполняет функции, ради которых он покупался – вопрос о необходимости шаманства снят. Но в случае голода по функциям, который посещает продвинутого пользователя, root-права становятся лакомым кусочком. И сегодня мы с вами обсудим основные плюсы и минусы этого действия.

Сначала немножко матчасти. Совсем немножко, не переживайте. Словом root в среде Linux называется аккаунт, имеющий определённые привилегии в доступе к файлам. Его ещё называют суперпользователем (superuser). Ближайшее точное сравнение — профиль администратора в Windows, только пароль обычно не нужен. Впрочем, это зависит от устройства, да и речь сейчас пойдёт не о полноценном Линуксе, а о его отпрыске мобильного формата по имени Android.

Итак, представьте себе, что к вашему компьютеру есть доступ через профиль администратора. Вы можете редактировать системные файлы, шаманить с реестром, гадить в кэш и делать другие операции, которые при определённом уровне кривизны рук могут привести к превращению ПК в фоторамку с перманентным BSOD на экране. Так вот, суперпользователю в Android приходится ещё тяжелее, потому что ошибок можно совершить больше, а просто переустановить ОС на нём – задача не из простых. Резюмируем: права суперпользователя позволяют обладателю смартфона получить доступ к системным файлам, и, что более важно — изменять их и сохранять эти изменения.

Не лишним будет сообщить, что существует три вида root-прав. Full Root предоставляет пользователю постоянный доступ к возможностям суперпользователя, Shell Root является обрезанным вариантом Full, то есть изменение папки /system недоступно, а Temporary Root даёт полный доступ лишь до перезагрузки смартфона. А теперь:

Недостатки

Гарантийный срок для большинства видов электроники колеблется от полугода до двух лет. За это время можно выявить послепродажный брак, ответственность за который лежит на производителе. Если виноват действительно он (что легко проверить) – ремонт и замена комплектующих будут произведены бесплатно в специальных сервисных центрах. Но если так называемые условия гарантии нарушены, придётся делать всё за свой счёт. Так вот, получение аккаунта суперпользователя нарушает условия гарантии в 99% случаев. Это всё равно, что вскрыть защитные пломбы на телевизоре, чтобы попытаться его починить самостоятельно, но не преуспев в этом, отправить устройство в СЦ. Гарантийные условия нарушены, производитель не знает, по какой причине произошла поломка — по его вине, или по вашей. А принимать на веру слова не будет никто.

Поэтому формирую первый и главный для рядового пользователя недостаток: при получении root-доступа вы почти наверняка лишаетесь гарантии на смартфон! Правда, есть вариант, который с определённым шансом может скрыть подобные действия — откат к заводской прошивке, но провернуть это способны лишь те, кто уже имел дело с доступом к системе на низком уровне. Хотя вероятность ошибки у таких пользователей близится к нулю, «счётчик» рутов, если производитель его вставил, это может и не обнулить. Ну а если гарантия на аппарат уже кончилась, то опасаться конкретно этого недостатка нет смысла.

В своей статье о мобильных вирусах я упоминал о том, что с открытием прав суперпользователя смартфон получает дополнительную пачку уязвимостей. Но это касается не только того, что даже простенький вирус без проблем сможет нагадить в святая святых — прямо в сердце карманного друга. Люди по природе своей любопытны. Получив неслыханную свободу в работе со смартфоном, они пытаются делать вещи, старательно избегая изучения матчасти. Их самоуверенность забавляет, а вот результат — не очень. Неосторожным движением руки многофункциональный телефон превращается в т.н. «кирпич», который даже не включается. Это значит, что в безупречно отлаженный механизм попала рукотворная песчинка, и застопорила работу шестерёнок. Для рядового пользователя дело решается исключительно сервисным центром, перепрошивкой и потерей всех данных (!), которые были в телефоне, за исключением оных на карте памяти и SIM-карте. А СЦ, в свою очередь, потребует с вас денег за эту услугу, потому что гарантия-то слетела (см. абзац выше).

Отсюда следует второй недостаток: при ошибке в работе с правами суперпользователя можно нарушить работу ОС вплоть до безвозвратной потери данных. Избежать этого можно следующими действиями: прежде чем что-то делать, необходимо узнать последствия — в Интернете наверняка есть хотя бы один человек, который уже рискнул и выложил свои мысли в доступной форме. Далее — всегда имейте под рукой резервную копию, и не одну. Я говорю не о файлах галереи или контактах, но про полноценный бэкап всей системы — так называемый recovery. Как его делать, мы обсудим позже.

Также для пользователя, впервые вкусившего прелести root, будет печальной следующая новость: вмешательство в системные файлы отберёт возможность смартфона к автоматическому обновлению, то есть к получению новых версий прошивки. Да-да, не видать вам KitKat, если сидите на старых версиях Android и решили побаловаться с суперпользователем. Впрочем, о надёжности тут речи не идёт — обновление может и прийти, и даже установиться, и даже работать! Но если у вас это произошло, считайте, что выиграли в три лотереи подряд, потому что это колосс на глиняных ногах, и ваша ОС работает на файлах, которые для этого не приспособлены. Поэтому недостаток номер три: после получения root-доступа про автообновления ОС смартфона можно забыть, разве что вы — очень удачливый человек. Если же очень хочется новую версию Android, придётся делать всё вручную. Это непросто, но раз вы получили root-доступ, извольте отвечать этому званию!

Серьёзный недостаток root-прав заключается в вариативности их получения от устройства к устройству. Начнём с того, что далеко не каждый смартфон вообще предоставляет такую возможность. Если у вашего устройства имеется функция (хотя я бы назвал «костылем») под названием NAND lock, можете не мечтать о руте. О Full Root, если быть точным. Остальные два варианта в большинстве случаев доступны. Да, есть способы обойти эту программную прелесть, но будьте готовы к дополнительным часам копания в инструкциях.

Полного списка устройств с NAND lock нет, но даже если ваш смартфон не препятствует получению root-доступа, не ожидайте, что это будет легко. Не существует единого рецепта для получения прав суперпользователя. Каждая новинка первые несколько дней будет изучаться Интернет-мастерами, прежде чем на западных форумах появится последовательность действий. Не стоит и думать, что она будет простой — шагов может быть больше 20, и в каждом из них фигурируют настольный компьютер, Интернет, сторонние программы, заглушки и еще чёрт знает что. Вывод: из-за NAND lock не на всех смартфонах есть возможность получить Full Root, а для большинства устройств, где эта возможность есть, существует отдельная инструкция, которую нужно долго искать и неукоснительно ей следовать. А если на пути к цели у вас что-то не получилось, велика вероятность получить технологичный «кирпич» по сходной цене.

И последний, но очень важный факт. Любые эксперименты с получением root-прав, изменением прошивки, созданием бэкапа на ПК или созданием рекавери должны проводиться ТОЛЬКО через РОДНОЙ USB-кабель, который должен быть воткнут ПРЯМО в корпус компьютера , в обход любых хабов. Дело в том, что различные китайские поделки любой цены и стоимости, за исключением фирменной периферии, глючат в самый важный момент, или просто не справляются с подобными задачами. Это не явление недавних дней – даже телефоны Siemens прошивалсь только через родной USB, который, кстати, стоял немало денег и был довольно редким. В результате можно сделать смартфон дорогостоящим кирпичом в процессе получения, скажем, рекавери, который должен обезопасить пользователя от подобных ситуаций. Будьте внимательны!

Преимущества

Свобода действий. Получив права Root, вы, как пользователь смартфона, приобретёте полный контроль над устройством. Не нравятся стандартные приложения? Удалите их с концами! Надоели стандартные ярлыки/иконки? Бога ради, смените их на любые, которые вам понравятся! Можно убрать заставку при запуске и выключении устройства, можно заставить родную вспышку приплясывать во время звонка, можно поставить искусственные ограничители на Интернет-траффик, убрать рекламу из приложений, скрыть панель уведомлений или навигационное меню и многое, многое другое. Само собой, для подобных изменений нужны соответствующие программы.

Похожие статьи