Jump to content

Самостоятельный переезд

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

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

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

Статическое самоперемещение обычно происходит во время загрузки (после того, как операционная система загрузила программное обеспечение и передала ему управление, но еще до завершения его инициализации), иногда также при изменении конфигурации программы на более позднем этапе во время выполнения . [3] [4]

Загрузчики

[ редактировать ]

Например, самоперемещение часто используется на ранних стадиях начальной загрузки операционных систем в таких архитектурах, как IBM PC-совместимые цепочки нижнего уровня , где загрузчики (такие как главная загрузочная запись (MBR), загрузочная запись тома (VBR) и начальная загрузочная запись) этапы загрузки операционных систем, таких как DOS ), смещаются с места, чтобы загрузить следующий этап в память.

Расширения CP/M

[ редактировать ]

В CP/M отладчика динамической отладки (DDT) динамически перемещался инструмент в верхнюю часть доступной памяти посредством перемещения границ страницы , чтобы максимизировать временную программную область (TPA) для запуска программ. [5] [6]

В 1988 году альтернативный процессор командной строки ZCPR 3.4 для Z-System представил так называемые программы типа 4 , которые также можно было самостоятельно перемещать через встроенную заглушку. [7] [8] [9] [10] [11]

Драйверы для x86 DOS

[ редактировать ]

В DOS самоперемещение иногда также используется более продвинутыми драйверами и резидентными системными расширениями (RSX) или резидентными программами завершения и пребывания (TSR), которые загружают себя «высоко» в верхнюю память более эффективно, чем это возможно для внешних «высоких» модулей. "-загрузчики (например, LOADHIGH / HILOAD , INSTALLHIGH / HIINSTALL или DEVICEHIGH / HIDEVICE и т. д.). [12] начиная с DOS 5), чтобы максимально увеличить объем памяти, доступной для приложений. Это связано с тем, что операционная система не знает внутренней работы загружаемого драйвера и поэтому должна загружать его в свободную область памяти, достаточно большую, чтобы хранить весь драйвер в виде блока, включая его код инициализации, даже если бы он был освобожден после инициализации. Для TSR операционная система также должна выделить префикс программного сегмента (PSP) и сегмент среды . [13] Это может привести к тому, что драйвер не будет загружен в наиболее подходящую свободную область памяти или даже вообще не позволит ему загрузиться на высоком уровне. В отличие от этого, самоперемещающийся драйвер может быть загружен куда угодно (в том числе в обычную память ), а затем переместить только его (обычно гораздо меньшую) резидентную часть в подходящую свободную область памяти в верхней памяти. Кроме того, расширенные самоперемещающиеся TSR (даже если они уже загружены в верхнюю память операционной системой) могут перемещаться по большей части своего собственного сегмента PSP и буфера командной строки и освобождать свой сегмент среды, чтобы еще больше уменьшить занимаемый в результате объем памяти и избежать фрагментация . [14] Некоторые самоперемещающиеся TSR также могут динамически менять свою «природу» и превращаться в драйверы устройств, даже если они изначально загружены как TSR, тем самым обычно также освобождая некоторую память. [4] Наконец, внешнему загрузчику технически невозможно переместить драйверы в расширенную память (EMS), область высокой памяти (HMA) или расширенную память (через DPMS или CLOAKING ), поскольку эти методы требуют, чтобы небольшие заглушки , специфичные для драйвера, оставались в обычных или верхнюю память для координации доступа к целевой области перемещения, [15] [номер 1] [номер 2] а в случае с драйверами устройств еще и потому, что заголовок драйвера всегда должен оставаться в первом мегабайте. [15] [13] Чтобы добиться этого, драйверы должны быть специально разработаны для поддержки самостоятельного перемещения в эти области. [15]

Некоторые расширенные драйверы DOS также содержат как драйвер устройства (который загружается операционной системой по смещению +0000h), так и TSR (загружается по смещению +0100h), разделяющие общую часть кода внутри в виде толстого двоичного файла . [13] Если общий код не спроектирован так, чтобы быть независимым от позиции , он требует некоторой формы исправления внутреннего адреса, аналогичной тому, что в противном случае уже было бы выполнено перемещающимся загрузчиком ; это похоже на этап исправления самостоятельного перемещения, но код уже загружается в целевое место загрузчиком операционной системы (а не самим драйвером).

Программы IBM DOS/360 и OS/360

[ редактировать ]

IBM DOS/360 не имела возможности перемещать программы во время загрузки. Иногда поддерживалось несколько версий программы, каждая из которых была создана для разных адресов загрузки ( разделов ). Особый класс программ, называемый самоперемещающимися программами, был запрограммирован так, чтобы перемещаться после загрузки. [16] IBM OS/360 перемещала исполняемые программы при их загрузке в память. Требовалась только одна копия программы, но после загрузки программу нельзя было переместить (так называемый одноразовый позиционно-независимый код ).

Другие примеры

[ редактировать ]

В качестве крайнего примера (многократного) самоперемещения, также называемого динамическим самоперемещением, можно создать компьютерную программу так, чтобы она не оставалась по фиксированному адресу в памяти даже во время выполнения, как, например, используется в тестах памяти червей . [17] [18] [19] [20] Apple Worm также является динамическим самоперемещающимся устройством. [21]

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Исключением из требования для заглушки является случай, когда расширенная память преобразуется в постоянную верхнюю память диспетчером памяти через EMSUMB , и, таким образом, к ней фактически осуществляется доступ как к верхней памяти , а не через EMS .
  2. ^ Есть два исключения из требования к заглушке для загрузки драйвера в HMA : заглушка не требуется, когда большая память постоянно включена на машинах без логики шлюза A20 , однако, поскольку это условие в целом не соблюдается, стандартная DOS драйверы не могут этим воспользоваться (если только они заранее не проверят это условие). В противном случае заглушка также не требуется в DR DOS 6.0 и выше, когда резидентные системные расширения (например, SHARE и NLSFUNC ) перехватывают только мультиплексное прерывание INT 2Fh, поскольку затем они могут использовать бэкдор-интерфейс для подключения к цепочке прерываний в пространстве ядра. так что обработчик шлюза A20 ядра будет обеспечивать функциональность заглушки. [а] Тем не менее, для правильной работы в HMA драйвер должен выполнить самостоятельное перемещение.
  1. ^ Дхамдере, Дхананджай М. (1999). Системное программирование и операционные системы . Образование. Нью-Дели, Индия: Тата МакГроу-Хилл . п. 232. ИСБН  0-07-463579-4 . ISBN   978-0-07-463579-7 . Архивировано из оригинала 01 февраля 2020 г. Проверено 8 ноября 2011 г. (658 страниц)
  2. ^ Дхамдере, Дхананджай М. (2006). Операционные системы: концептуальный подход . Образование. Нью-Дели, Индия: Тата МакГроу-Хилл . п. 231. ИСБН  0-07-061194-7 . ISBN   978-0-07-061194-8 . Архивировано из оригинала 20 февраля 2020 г. Проверено 20 февраля 2020 г. (799 страниц)
  3. ^ Пол, Матиас Р.; Фринке, Аксель К. (13 октября 1997 г.) [1991], FreeKEYB - Расширенный драйвер клавиатуры и консоли для DOS (Руководство пользователя) (изд. 6.5) [1] (Примечание. FreeKEYB - это Unicode динамически настраиваемый драйвер на основе , поддерживающий большинство раскладки клавиатуры , кодовые страницы и коды стран . Использование готового ассемблера макросов , а также системы инструментов автоматического анализа предварительной и постобработки для генерации зависимостей и морфинга кода метаданных встраиваются в исполняемый файл. , которые затем двоичный код и самоудаляющийся, расслабляющий и перемещающийся загрузчик , драйвер поддерживает различную загрузку и установку как TSR или драйвер устройства , а также реализует передовые методы самостоятельного перемещения (в том числе в обычную память DOS , UMB , неиспользуемую видеопамять , или необработанная память, также использующая префикса программного сегмента перегрузку и рекомбинацию сегментов среды на уровне байтов ) и детализированное динамическое устранение мертвого кода во время загрузки, а также самомодифицирующийся код и возможность реконфигурации во время выполнения, чтобы минимизировать его объем памяти в зависимости от оборудования, конфигурацию операционной системы и драйвера, а также выбранный набор функций и языковой стандарт.)
  4. ^ Перейти обратно: а б Пол, Матиас Р.; Фринке, Аксель К. (16 января 2006 г.), FreeKEYB - Расширенный международный драйвер клавиатуры и консоли для DOS (Руководство пользователя) (7 (предварительное) изд.)
  5. ^ Килдалл, Гэри Арлен (февраль 1978 г.) [1976]. «Простой метод статического перемещения абсолютного машинного кода» . Журнал доктора Добба по компьютерной гимнастике и ортодонтии . 3 (2). Народная компьютерная компания : 10–13 (66–69). ISBN  0-8104-5490-4 . #22 ковчег:/13960/t8hf1g21p . Проверено 19 августа 2017 г. [2] [3] [4] . Первоначально представлено по адресу: Килдалл, Гэри Арлен (1977) [22–24 ноября 1976 г.]. «Простой метод статического перемещения абсолютного машинного кода». Написано в Военно-морской аспирантуре , Монтерей, Калифорния, США. В Титусе, Гарольд А. (ред.). Отчет конференции: Десятая ежегодная конференция Asilomar по схемам, системам и компьютерам: доклады представлены 22–24 ноября 1976 г. Отель и конференц-центр Asilomar, Пасифик-Гроув, Калифорния, США: Western Periodicals Company. стр. 420–424. ISSN   1058-6393 . Проверено 6 декабря 2021 г. (609 страниц). (Этот метод «изменения размера», называемый перемещением границ страницы , можно было применить статически к CP/M-80 образу диска с помощью MOVCPM [ pl ] для того, чтобы максимизировать TPA для запуска программ. Он также использовался динамически CP/ отладчика M Инструмент динамической отладки (DDT) для перемещения в верхнюю память. Тот же подход был независимо разработан Брюсом Х. Ван Наттой из IMS Associates для создания перемещаемого PL/M кода . В качестве перемещения границ абзаца позже был использован другой вариант этого метода. динамически HMA Самоперемещающиеся TSR , такие как KEYB , SHARE и NLSFUNC, в DR DOS 6.0 и выше. Гораздо более сложный метод детального перемещения смещения на уровне байтов , основанный на похожем подходе, был независимо задуман и реализован Маттиасом Р. Полом и Акселем К. Фринке для их динамического устранения мертвого кода , чтобы динамически минимизировать влияние резидентных драйверов во время выполнения и TSR (например, FreeKEYB).)
  6. ^ Хюитт, Роберт; Юбэнкс, Гордон ; Роландер, Томас «Том» Алан ; Лоус, Дэвид; Мишель, Ховард Э.; Халла, Брайан; Уортон, Джон Харрисон ; Берг, Брайан; Су, Вейлянь; Килдалл, Скотт ; Кампе, Билл (25 апреля 2014 г.). Лоус, Дэвид (ред.). «Наследие Гэри Килдалла: посвящение CP / M IEEE» (PDF) (видеотранскрипция). Пасифик-Гроув, Калифорния, США: Музей истории компьютеров . Справочный номер CHM: X7170.2014. Архивировано (PDF) из оригинала 27 декабря 2014 г. Проверено 19 января 2020 г. […] Законы: […] « динамическое перемещение » ОС. Можете ли вы рассказать нам, что это такое и почему это важно? […] Юбэнкс : […] то, что сделал Гэри […] было […] ошеломляющим. […] Я помню тот день, когда в школе он прибежал в лабораторию и сказал: «Я придумал, как переехать ». Он воспользовался тем фактом, что единственным байтом всегда был байт старшего порядка . И поэтому он создал растровое изображение . […] не имело значения, сколько памяти было у компьютера, операционную систему всегда можно было переместить в верхнюю память. Следовательно, вы можете коммерциализировать это […] на машинах с разным объемом памяти. […] вы не можете продавать 64K CP/M и 47K CP/M. Было бы просто смешно проводить жесткую компиляцию адресов. Итак, Гэри понял это однажды ночью, возможно, посреди ночи, думая о каком-то кодировании, и это действительно сделало возможным коммерциализацию CP/M. Я действительно думаю, что без этого переезда это была бы очень сложная проблема. Им показалось бы сложным заставить людей покупать его, и если бы вы добавили больше памяти, вам пришлось бы покупать другую операционную систему. […] Intel […] поменяла местами байты , верно, для адресов памяти. Но они всегда находились в одном и том же месте, поэтому можно было переместить его на границу в 256 байт , если быть точным. Таким образом, вы всегда можете переместить его, используя лишь растровое изображение того, где эти […] Законы: Определенно, самое красноречивое объяснение динамического перемещения, которое я когда-либо получал […] [5] [6] (33 страницы)
  7. ^ Сейдж, Джей (май – июнь 1988 г.). Карлсон, Арт (ред.). «ZCPR 3.4 — Программы типа 4» . Компьютерный журнал (TCJ) — Программирование, поддержка пользователей, приложения . ЗЦПР3 Уголок (32). Водопад Колумбия, Монтана, США: 10–17 . ISSN   0748-9331 . ковчег:/13960/t1wd4v943 . Проверено 29 ноября 2021 г. [7] [8]
  8. ^ Митчелл, Бриджер (июль – август 1988 г.). Карлсон, Арт (ред.). «Z3PLUS и перемещение — информация о ZCPR3PLUS и о том, как написать самоперемещающийся код Z80» . Компьютерный журнал (TCJ) — Программирование, поддержка пользователей, приложения . Продвинутый CP/M (33). Водопад Колумбия, Монтана, США: 9–15 . ISSN   0748-9331 . ковчег:/13960/t36121780 . Проверено 9 февраля 2020 г. [9] [10]
  9. ^ Сейдж, Джей (сентябрь – октябрь 1988 г.). Карлсон, Арт (ред.). «Подробнее о перемещаемом коде, файлах PRL, ZCPR34 и программах типа 4» . Компьютерный журнал (TCJ) — Программирование, поддержка пользователей, приложения . ЗЦПР3 Уголок (34). Водопад Колумбия, Монтана, США: 20–25 . ISSN   0748-9331 . ковчег:/13960/t0ks7pc39 . Проверено 9 февраля 2020 г. [11] [12] [13]
  10. ^ Сейдж, Джей (январь – февраль 1992 г.). Карлсон, Арт; МакИвен, Крис (ред.). «Десять лет ЗКПР» . Компьютерный журнал (TCJ) — Программирование, поддержка пользователей, приложения . Уголок Z-системы (54). С. Плейнфилд, Нью-Джерси, США: Socrates Press: 3–7 . ISSN   0748-9331 . ковчег:/13960/t89g6n689 . Проверено 29 ноября 2021 г. [14] [15] [16]
  11. ^ Сейдж, Джей (май – июнь 1992 г.) [март – июнь 1992 г.]. Карлсон, Арт; МакИвен, Крис (ред.). «Программы типа 3 и типа 4» . Компьютерный журнал (TCJ) — Программирование, поддержка пользователей, приложения . Уголок Z-системы - Некоторые новые применения программ типа 4 (55). С. Плейнфилд, Нью-Джерси, США: Socrates Press: 13–19 . ISSN   0748-9331 . ковчег:/13960/t4dn54d22 . Проверено 29 ноября 2021 г. [17] [18]
  12. ^ «Глава 10 Управление памятью» . Руководство пользователя Caldera DR-DOS 7.02 . Caldera, Inc. , 1998 г. [1993, 1997]. Архивировано из оригинала 30 августа 2017 г. Проверено 30 августа 2017 г.
  13. ^ Перейти обратно: а б с Пол, Матиас Р. (6 апреля 2002 г.). «Re: [fd-dev] АНОНС: CuteMouse 2.0 альфа 1» . freedos-dev . Архивировано из оригинала 07 февраля 2020 г. Проверено 7 февраля 2020 г. […] Добавьте в драйвер заголовок устройства SYS, чтобы CTMOUSE мог быть одновременно обычным TSR и драйвером устройства — аналогично нашему расширенному драйверу клавиатуры FreeKEYB. это на самом деле не требуется, […] В DR DOS поскольку INSTALL = поддерживается, начиная с DR DOS 3.41+ и DR DOS, сохраняя порядок директив [D]CONFIG.SYS […], но это […] улучшит […] гибкость в системах MS-DOS / PC DOS , которые […] всегда выполняют директивы DEVICE = перед любыми инструкциями INSTALL=, независимо от их порядка в файле. […] программное обеспечение может потребовать, чтобы драйвер мыши присутствовал в качестве драйвера устройства, поскольку в старые времена драйверы мыши всегда были драйверами устройств. Эти драйверы мыши имели определенные имена драйверов устройств в зависимости от того, какой протокол они использовали (« PC$MOUSE » для режима системы мыши , например), и некоторые программы могут искать эти драйверы, чтобы определить правильный тип используемой мыши. . […] Еще одним преимуществом является то, что драйверы устройств обычно потребляют меньше памяти (нет Environment , нет PSP ) […] По сути, это сложный заголовок файла, другой код для анализа командной строки, другая точка входа и строка выхода, а также некоторая магия сегментов для преодоления разницы ORG 0 / ORG 100h. Самостоятельная загрузка драйвера устройства немного сложнее, так как вам придется оставить заголовок драйвера там, где он есть, и переместить только оставшуюся часть драйвера […]
  14. ^ Пол, Матиас Р. (18 августа 2001 г.). «Re: [fd-dev] О GRAFTABL и DISPLAY.SYS (было: Изменение кодовых страниц в FreeDOS)» . freedos-dev . Архивировано из оригинала 4 сентября 2017 г. Проверено 4 сентября 2017 г. […] По крайней мере, MS-DOS 6.0 + GRAFTABL перемещается по частям своего сегмента PSP (смещение +60h и выше), чтобы минимизировать свой резидентный размер. […] (Примечание. GRAFTABBL 2.00+ после DR-DOS 7.03 также поддерживает динамическое самостоятельное перемещение.)
  15. ^ Перейти обратно: а б с Пол, Матиас Р. (2 февраля 2002 г.). «Treiber dynamisch nachladen» [Динамическая загрузка драйверов] (на немецком языке). Группа новостей : de.comp.os.msdos . Архивировано из оригинала 9 сентября 2017 г. Проверено 2 июля 2017 г. (Примечание. Дается обзор методов высокой нагрузки в DOS, включая использование команд LOADHIGH и т. д., а также методов самостоятельного перемещения в UMB с использованием API XMSUMB . Также обсуждаются более сложные методы, необходимые TSR для перемещения в HMA с использованием внутреннего -перемещение смещения сегмента .)
  16. ^ Системы управления Бутом (1 ноября 1972 г.). «Пропускная способность – Вы получаете все, что заслуживаете? – ДОСРЕЛО» . Computerworld — еженедельник новостей для компьютерного сообщества (реклама). Том. ВИ, нет. 44. Сан-Франциско, Калифорния, США: Computerworld, Inc. с. 9. Архивировано из оригинала 06 февраля 2020 г. Проверено 7 февраля 2020 г. […] DOSRELO предоставляет метод DOS самостоятельного перемещения проблемных программ . DOSRELO обеспечивает возможность самостоятельного перемещения всех программ, независимо от языка, путем добавления логики точки входа в объектный код программы до того, как редактор связей каталогизирует ее в базовой библиотеке изображений . […]
  17. ^ Тест памяти червей (PDF) . Векторная графика . 21 октября 2015 г. Архивировано (PDF) из оригинала 15 мая 2019 г. Проверено 13 декабря 2021 г. (3 страницы) (Примечание. Из руководства по эксплуатации Vector Graphic 3. )
  18. ^ Уилкинсон, Уильям «Билл» Альберт (2003) [1996, 1984]. «Червь H89: тестирование памяти H89» . Страница компании Билла Уилкинсона Heath . Архивировано из оригинала 13 декабря 2021 г. Проверено 13 декабря 2021 г. […] Помимо получения инструкции, Z80 использует половину цикла для обновления динамического ОЗУ . […] поскольку Z80 должен тратить половину каждого цикла выборки инструкций на выполнение других задач, у него не так много времени для выборки байта инструкции , как для байта данных. Если одна из микросхем ОЗУ в той области памяти, к которой осуществляется доступ, работает немного медленно, Z80 может получить неверную битовую комбинацию при получении инструкции, но получить правильную при чтении данных. […] встроенный тест памяти не выявляет проблемы такого типа […] это строго тест чтения/записи данных. Во время теста все инструкции извлекаются из ПЗУ , а не из ОЗУ […], в результате чего H89 проходит тест памяти, но все еще работает хаотично в некоторых программах. […] Это программа, которая проверяет память, перемещаясь по ОЗУ. При этом ЦП печатает текущий адрес программы на CRT , а затем извлекает инструкцию по этому адресу. Если микросхемы ОЗУ по этому адресу в порядке, ЦП перемещает тестовую программу в следующую ячейку памяти, печатает новый адрес и повторяет процедуру. Но если одна из микросхем ОЗУ достаточно медленная, чтобы возвращать неверную битовую комбинацию, ЦП неправильно интерпретирует инструкцию и ведет себя непредсказуемо. Однако вполне вероятно, что дисплей заблокируется, показывая адрес неисправной микросхемы. Это сужает проблему до восьми микросхем, что является улучшением по сравнению с необходимостью проверять целых 32. […] Программа выполнит проверку на наличие червей , отправив инструкцию RST 7 (RESTART 7) из нижнего конца памяти. до последнего рабочего адреса. Остальная часть программы остается неподвижной и занимается отображением текущего местоположения команды RST 7 и ее перемещением . Кстати, программа называется тестом на червяков, потому что по мере продвижения инструкции RST 7 по памяти она оставляет после себя след NOP скользкий (НЕТ ОПЕРАЦИИ). […]
  19. ^ Штайнман, Ян В. (1 сентября 1986 г.). Написано в Вест-Линне, штат Орегон, США. «Тест памяти червя» . Право на собрания (TRTA). Журнал доктора Добба о программных инструментах для профессионального программиста . 11 (9). Редвуд-Сити, Калифорния, США: M&T Publishing, Inc. / The People's Computer Company : 114–115 (662–663). ISSN   1044-789X . № 119. ковчег:/13960/t74v34p9p КОДЕН   ДДЖОЕБ . Проверено 13 декабря 2021 г. [19] (2 страницы)
  20. ^ Штайнман, Ян В. (1986). «III. 68000 полезных процедур и методов, 16. Тест на память червя» (PDF) . Написано в Вест-Линне, штат Орегон, США. Справочник доктора Добба по программированию 68000 . Нью-Йорк, США: Brady Book / Prentice Hall Press / Simon & Schuster, Inc. , стр. 341–350. ISBN  0-13-216649-6 . LCCN   86-25308 . Архивировано (PDF) из оригинала 13 декабря 2021 г. Проверено 13 декабря 2021 г. (1+5+10+1 стр.)
  21. ^ Дьюдни, Александр Киватин (март 1985 г.). «Компьютерные развлечения — бестиарий вирусов, червей и других угроз компьютерной памяти» . Научный американец . 285 : 38–39. Архивировано из оригинала 4 июля 2017 г. Проверено 4 июля 2017 г.

Дальнейшее чтение

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 1b3c72aa1c40a3f3855f7152b47c728b__1697630880
URL1:https://arc.ask3.ru/arc/aa/1b/8b/1b3c72aa1c40a3f3855f7152b47c728b.html
Заголовок, (Title) документа по адресу, URL1:
Self-relocation - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)