Начальная

Windows Commander

Far
WinNavigator
Frigate
Norton Commander
WinNC
Dos Navigator
Servant Salamander
Turbo Browser

Winamp, Skins, Plugins
Необходимые Утилиты
Текстовые редакторы
Юмор

File managers and best utilites

Каковы конкретные различия между "эмулятором" и "виртуальной машиной"? Эмулятор и заглушка различия


Unit-тесты, пытаемся писать правильно, чтобы потом не было мучительно больно / Хабр

Большинство людей не умеют писать unit-тесты. И даже те, кто применяет модульные тесты в ежедневной разработке, зачастую признают, что получившиеся тесты иногда не очень эффективны по определенным причинам. К этой категории людей я могу отнести и себя. В первую очередь, такой «причиной» является некоторая появляющаяся «инертность» кода, заключающаяся в том, что если требуется немного изменить какой-то ключевой алгоритм, добавить пару строчек кода, то при этом «падают» ~100 модульных тестов и приходится тратить продолжительное время на то чтобы заставить их работать вновь. Итак, приступим к «хорошим рекомендациям» при написании автоматических модульных тестов. Нет, я не буду капитаном очевидностью, в очередной раз описывая популярный стиль написания тестов под названием AAA (Arange-Act-Assert). Зато попытаюсь объяснить, чем отличается Mock от Stub-а и что далеко не все тестовые объекты — «моки». Глобально модульные тесты можно условно поделить на две группы: тесты состояния (state based) и тесты взаимодействия (interaction tests).

Тесты состояния — тесты, проверяющие что вызываемый метод объекта отработал корректно, проверяя состояние тестируемого объекта после вызова метода.

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

Стоит также заметить, что модульный (unit) тест может запросто превратиться в интеграционный тест, если при тестировании используется реальное окружение(внешние зависимости) — такие как база данных, файловая система и т.д.

Интеграционные тесты — это тесты, проверяющие работоспособность двух или более модулей системы, но в совокупности — то есть нескольких объектов как единого блока. В тестах взаимодействия же тестируется конкретный, определенный объект и то, как именно он взаимодействует с внешними зависимостями.

Внешняя зависимость — это объект, с которым взаимодействует код и над которым нет прямого контроля. Для ликвидации внешних зависимостей в модульных тестах используются тестовые объекты, например такие как stubs (заглушки).

Стоит заметить что существует классический труд по модульным тестам за авторством Жерарда Месароша под названием "xUnit test patterns: refactoring test code", в котором автор вводит аж 5 видов тестовых объектов, которые могут запросто запутать неподготовленного человека:

— dummy object, который обычно передается в тестируемый класс в качестве параметра, но не имеет поведения, с ним ничего не происходит, никакие методы не вызываются. Примером таких dummy-объектов являются new object(), null, «Ignored String» и т.д.

— test stub (заглушка), используется для получения данных из внешней зависимости, подменяя её. При этом игнорирует все данные, могущие поступать из тестируемого объекта в stub. Один из самых популярных видов тестовых объектов. Тестируемый объект использует чтение из конфигурационного файла? Передаем ему ConfigFileStub возвращающий тестовые строки конфигурации для избавления зависимости на файловую систему.

— test spy (тестовый шпион), используется для тестов взаимодействия, основной функцией является запись данных и вызовов, поступающих из тестируемого объекта для последующей проверки корректности вызова зависимого объекта. Позволяет проверить логику именно нашего тестируемого объекта, без проверок зависимых объектов.

— mock object (мок-объект), очень похож на тестовый шпион, однако не записывает последовательность вызовов с переданными параметрами для последующей проверки, а может сам выкидывать исключения при некорректно переданных данных. Т.е. именно мок-объект проверяет корректность поведения тестируемого объекта.

— fake object (фальшивый объект), используется в основном чтобы запускать (незапускаемые) тесты (быстрее) и ускорения их работы. Эдакая замена тяжеловесного внешнего зависимого объекта его легковесной реализацией. Основные примеры — эмулятор для конкретного приложения БД в памяти (fake database) или фальшивый вебсервис.

Roy Osherove в книге "The Art of Unit Testing" предлагает упростить данную классификацию и оставляет всего три типа тестовых объектов — Fakes, Stubs и Mocks. Причем Fake может быть как stub-ом, так и mock-ом, а тестовый шпион становится mock-ом. Хотя лично мне не очень нравится перемешивание тестового шпиона и мок-объекта.

Запутанно? Возможно. У данной статьи была задача показать, что написание правильных модульных тестов — достаточно сложная задача, и что не всё то mock, что создаётся в посредством mock-frameworks.

Надеюсь, я сумел подвести читателя к основной мысли — написание качественных модульных тестов дело достаточно непростое. Модульные тесты подчиняются тем же правилам, что и основное приложение, которое они тестируют. При написании модульных тестов следует тестировать модули настолько изолированно друг от друга, насколько это возможно, и различные разновидности применяемых тестовых объектов в этом, безусловно, помогают. Стиль написания модульных тестов должен быть таким же, как если бы вы писали само приложения — без копипастов, с продуманными классами, поведением, логикой.

habr.com

Малварь по шагам [№5] Эмулятор

Вот мы и подошли к одной из самых горячих тем из списка противовирусных технологий.

Эмулятор — не более чем виртуальная машина, симулирующая исполнение вируса на реальном процессоре. Исторически, помогал снимать слои неизвестных упаковщиков, иначе говоря, раскручивал вирусные декрипторы до детектирумого кода. Зачастую в паре с ним работает эвристик, который (как и следует из названия) по косвенным признакам, изобличает неизвестные av семплы.

Борьба с эмулятором — одно из самых творческих и наукоёмких направлений малвари, т.к. предполагает исследование разросшейся за последние годы системы по принципу чёрного ящика.

Ситуация с эмулятором чем-то напоминает знаменитую трилогию «Матрица»: главный герой (вредоносный файл) пытается понять находится ли он в реальном мире или в дьявольской симуляции, созданной хитроумной машиной, подключенной к его органам зрения\осязания\слуха (winapi). Если это ему удаётся, он получает шанс вырваться за границы иллюзий: при запуске нового файла, антивирус проверяет его в песочнице, после чего разрешает запуск в реальной системе.

Таким образом наша задача — обойти эмулятор. Как же это сделать? Из возможных путей взаимодействия с системой у нас только WinApi и чтение памяти собственного процесса напрямую. С помощью этих инструментов необходимо понять исполняемся ли мы внутри «коробки» или на реальной системе.

Эмулятор изнутри

Эмулятор допиливают сообразно потоку малвари на операционном столе дятлов, так что они представляют собой как бы отпечаток, оставленный потоком массовых семплов. Если сегодня конкретный трюк (например — плохая симуляция файловой системы) хорошо работает против эмуляторов, после прогруза на virustotal (или даже публикации кода на форумах где сидят дятлы) апдейт эмулятора будет иметь против него заплатку.

 

Работает по принципу беговой дорожки: виртуальный мир исчезает за нами и моделируется впереди нас, пока мы продвигаемся по нему.» Рик и морти 1s-4e

Конкретные реализации могут отличаться, но суть остаётся та же. Эмулятор находит точку входа из pe-хидеров, загружает образ в память, выставляет начальные значения виртуальных регистров, стека и запускает пошаговую трассировку. Если мы обращаемся к некоему участку памяти, эмулятор генерирует его на лету, например код библиотек. Это даёт возможность корректно эмулировать хуки, не загружая настоящий код dll. Такие структуры как PEB довольно хорошо эмулируются, просто потому что используются почти во всех упаковщиках. Когда происходит вызов winapi, эмулятор вызывает специальную функцию изнутри себя, призванную симулировать исполнения реальной winapi, такие функции принято называть стабами или просто заглушкой.

Как легко догадаться, как бы не был стар и всеобъемлющ эмулятор, коду размером в 20МБ (~средний эмулятор) не под силу работать так же как ОГРОМНАЯ система windows.

Несколько интересных примеров обхода эмуляторов

WinApiПредположим, мы знаем, что рядом с нашим вирусом всегда лежит файл конфигурации, некий «1.txt». Мы пробуем его читать и завершаем процесс при его отсутствии, эмулятор же не использует данные реальной системы и ничего об этом файле не знает, поэтому его заглушка на CreateFile возвращает ошибку.

WinApi + SEHМы фазим несколько библиотек, составляя список функций, падающих в SEH при некорректных параметрах. Эмулятор проглатывает вызов функции и возвращает 0, в то время как реальная функция передаёт управление на SEH-обработчик.

WinApi + стекСилой данной нам фазингом, мы узнаём, что некая функция после вызова на любой системе, оставляет после себя в стеке конкретное значение. Сверяем его с ожидаемым на реальной системе и если оно не совпадает — выходим. Эмулятор в пролёте.

Подсистемы windowsГоду в 13 эмулятор AVP плохо справлялся с симуляцией потоков, чем охотно пользовались крипторы. Со временем симуляция этой подсистемы была доведена до ума. Если взять книгу о подсистемах винды и шаг за шагом проверить их работу под эмулятором, можно найти ещё много различий в ответах на реальной системе и в симуляции.

Ресурсы эмулятораНа каждый скан наложен жёсткий лимит по ресурсам компьютера: количество оперативки и процессорного времени. Атака на первый пункт не так широко распространена как на второй. Нет ничего проще и легальнее: вы создаёте огромное количество не-вирусного кода, с обилием WinApi вызовов, дабы эмулятор не мог исполнить весь ассемблерный код на реальном процессоре для скорости. Количество тактов, отведенных эмулятору заканчивается до начала вредоносного кода и мы получаем доступ к реальному процессору =).

 

Ссылки

Вы просили ссылок — проставляю их по статьям:

Ну и конечно, Вы можете помочь Ретвитами!

Спасибо 20 ajax loader

vxlab.info

Виртуализация и эмуляция | Русскоязычная документация по Ubuntu

Несмотря на огромное количество приложений для Lubuntu, иногда необходимо запустить какую-нибудь специфическую программу, аналогов которой в Lubuntu не существует или они вас не устраивают по каким-либо причинам. Существуют разные методы и подходы к решению этой задачи, такие как установка двух и более операционных систем на один компьютер с возможностью выбора необходимой во время включения («дуалбут»), установка необходимой операционной системы вместе в требуемыми программами в виртуальную машину, альтернативная реализация API (сокращение от англ. Application Programming Interface — интерфейс прикладного программирования) операционной системы, необходимого для запуска и работы требуемой программы. В Lubuntu существует несколько виртуальных машин, но наиболее популярной является VirtualBox.

VirtualBox

VirtualBox — это виртуальная машина, предназначенная для запуска другой операционной системы внутри неё. Она позволяет запускать различные ОС, например Windows, BSD, Solaris, MacOSX, OS/2, и различные дистрибутивы Linux. Но надо помнить, что виртуализация снижает производительность виртуальной ОС и ограничивает доступные для неё ресурсы, такие, как оперативная память, видеопамять и т.д. Преимуществами VirtualBox являются:

  1. уменьшение проблем с драйверами (особенно актуально для малораспространённых операционных систем)

  2. стабильная работа программ, запущенных в виртуальной машине (они работают в родной операционной системе)

К недостатком можно отнести:

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

  2. Повышенные требования к характеристикам компьютера (одновременно работают 2 операционные системы)

  3. Необходимость иметь лицензионную операционную систему (установка Windows в VirtualBox не отменяет требования покупки самой операционной системы)

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

Для установки VirtualBox в Lubuntu необходимо нажать на специальную кнопку или выполнить команду в терминале:

sudo apt-get install virtualbox

Подробнее про VirtualBox можно почитать тут.

Wine

Название программы Wine часто расшифровывают как: Wine Is Not an Emulator (Wine не эмулятор). В отличии от VirtualBox, Wine не эмулирует ПК, он также не эмулирует операционную систему, а является альтернативной реализацией Windows API. Он позволяет запускать Windows программы в Linux, но совместимость не всегда полная, не все программы удастся запустить, а некоторые будут работать не совсем корректно. Но большинство популярных программ работают в нём очень даже неплохо. К преимуществам Wine можно отнести:

  1. Бесплатность и отсутствие необходимости в покупке Windows

  2. Отсутствие повышенных требований к железу

  3. Хорошую интегрируемость Windows-программ в Lubuntu

  4. Нет необходимости ждать, пока загрузится виртуальная ОС

Но у Wine есть и недостатки:

  1. Не все программы в нём будут хорошо и стабильно работать

  2. Не все программы в нём будут вообще работать

  3. Поддержка только Windows-программ

  4. Некоторые программы ставятся сложно

  5. Невозможность установить Windows-драйвер для оборудования

  6. Сложно (хотя и возможно) добиться одинакового внешнего вида приложения запущенного в Wine и в Lubuntu.

  7. Нельзя установить ActiveX в Wine

Для установки Wine в Lubuntu необходимо нажать на специальную кнопку или выполнить команду в терминале:

sudo apt-get install wine

Подробнее про Wine написано тут и тут.

Winetricks

Winetricks — скрипт, созданный для упрощения работы с Wine. Он позволяет более аккуратно устанавливать некоторые приложения Windows и необходимые библиотеки, так как автоматически создаёт для них правильные настройки и скачивает требуемые компоненты, например DirectX. Winetricks можно использовать как в графическом, так и в консольном режиме. При помощи Winetricks можно устанавливать как программы, так и отдельные компоненты. Преимуществом Winetricks является его небольшой размер. Также он позволяет устанавливать программное обеспечение, для которого нет полноценной поддержки в PlayOnLinux, хотя обратное утверждение тоже верно. Таким образом, в чём-то эти программы дополняют друг друга. Для установки Winetricks в Lubuntu необходимо нажать на специальную кнопку или выполнить команду в терминале:

sudo apt-get install winetricks

Для запуска с графическим интерфейсом необходимо запускать Winetricks с ключом -gui.

winetricks --gui

PlayOnLinux

Для упрощения установки Windows приложений в Wine была создана ещё одна программа — PlayOnLinux. Она создана для установки различных программ, созданных для Windows в Lubuntu. По сути, как и Winetricks, она представляет собой надстройку над Wine. PlayOnLinux позволяет (в случае бесплатного распространения) автоматически скачивать и устанавливать некоторые программы из интернета, если же такое невозможно, например, по лицензионным соображениям, то программа может быть установлена с иного источника, например, диска или файла. Также интерфейс программы PlayOnLinux позволяет до установки посмотреть некоторую информацию об устанавливаемой программе (текст и скриншот, если они доступны). PlayOnLinux может скачивать (если это необходимо) специальные версии Wine вместе с настройками для конкретной программы, а также применять к программе некоторые исправления для того, чтобы добиться более стабильной работы. Список поддерживаемых для установки программ в PlayOnLinux частично отличается от списка поддерживаемых программ в Winetricks. Также есть возможность установки неподдерживаемых программ, но в таком случае PlayOnLinux не сможет повысить стабильность их работы. Преимущества PlayOnLinux:

  1. Если программа есть в списке поддерживаемых, то вероятность того, что она стабильно заработает после установки, значительно повышается

  2. Более развитый интерфейс по сравнению с Winetricks

  3. Дружелюбный интерфейс установки проведёт вас через необходимые шаги первоначальной настройки и получения необходимых компонентов

Недостатки PlayOnLinux:

  1. Перевод на русский язык не так полон, как хотелось бы

  2. Не очень развита возможность ручной установки требуемых библиотек и компонентов

Для установки PlayOnLinux в Lubuntu необходимо нажать на специальную кнопку или выполнить команду в терминале:

sudo apt-get install playonlinux

Эпилог

help.ubuntu.ru

terminology - Симулятор или эмулятор? В чем разница?

Я не думаю, что эмулятор и симулятор можно сравнить. Оба имитируют что-то, но не являются частью одного и того же объема рассуждений, они не используются в одном и том же контексте.

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

Эмулятор - это устройство, которое имитирует что-то достаточно близко, чтобы можно было заменить на реальную вещь. Например, вы хотите, чтобы схема работала как схема ROM (постоянное запоминающее устройство), но также хочет отрегулировать контент, пока он не станет тем, что вы хотите. Вы будете использовать эмулятор ROM, черный ящик (вероятно, будет основан на процессоре) с физическими и электрическими интерфейсами, совместимыми с ПЗУ, который вы хотите подражать. Эмулятор будет подключен к устройству вместо реального ПЗУ. Материнская плата не увидит каких-либо различий при работе, но вы сможете легко изменить содержимое эмулированного ROM. В противном случае эмулятор будет действовать точно так же, как и фактическое в контексте своей материнской платы (возможно, немного медленнее из-за фактической внутренней модели), но будут дополнительные функции (например, переписывание), видимые только дизайнеру, из контекста материнской платы, Таким образом, определение эмулятора было бы: что-то, что имитирует оригинал, имеет все свои функциональные возможности, может фактически заменить его до некоторой степени в реальном мире и может иметь дополнительные функции, не видимые в обычном контексте.

A симулятор используется в другом контексте мышления, например, в симуляторе самолета, симуляторе автомобиля и т.д. Моделирование будет заботиться только о каком-то аспекте фактической вещи, обычно относящейся к как человек будет воспринимать и контролировать его. Симулятор не будет выполнять функции реального материала и не может быть использован для этого. Самолет-симулятор не будет летать или носить кого-то, это не его цель. Симулятор не предназначен для работы, но для пилота как-то похоже на фактическую вещь для целей, отличных от обычных. (в том числе в таких необычных ситуациях, как отказ от двигателя). Таким образом, определение симулятора было бы: что-то, что может показаться человеку, в некоторой степени, подобно оригиналу, но не может заменить его для фактического использования. Кроме того, пилот будет знать, что симулятор является симулятором.

Я не думаю, что мы увидим какой-нибудь ПЗУ-симулятор, потому что ПЗУ не взаимодействуют с людьми, и мы не увидим какой-либо самолет-эмулятор, потому что у самолетов не может быть замены, выполняющей те же функции в реальном мире.

На мой взгляд, модель внутри эмулятора или симулятора может быть чем угодно и не должна быть похожа на модель оригинала. Модель эмулятора ПЗУ, скорее всего, будет программным обеспечением вместо аппаратного обеспечения, MS Flight Simulator не может быть больше программного обеспечения, чем это.

Это сравнение обоих терминов будет противоречить выбранному в данный момент ответу (от Toybuilder), который вносит разницу во внутреннюю модель, в то время как мое предложение состоит в том, что разница заключается в том, может ли подделка использоваться или не может использоваться для выполнения фактической функции в реальный мир (в какой-то приемлемой степени, действительно).

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

Это большая разница с эмулятором, который эмулирует только оригинал, и его цель должна использоваться в среде оригинала без необходимости эмулировать его. Вернемся к контексту плоскости... что может быть плоским эмулятором? Может быть, поезд, который будет соединять два аэропорта - на самом деле два самолета - с пассажирами, с бортпроводниками на борту, с салоном автомобиля, похожим на фактическую кабину самолета, и с капитаном, говорящим "дамы и господа, наша высота составляет 10 км, а температура в пункте назначения 24 ° C. Его преимущество трудно увидеть, гул...

Как вывод, эмулятор - это настоящая вещь, предназначенная для работы, симулятор - это подделка, предназначенная для обмана пользователя.

qaru.site

virtual-machine - Каковы конкретные различия между "эмулятором" и "виртуальной машиной"?

Dell объяснила, в чем разница между эмуляторами и виртуальными машинами.

Эмуляция или виртуализация: В чем разница?

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

В чем разница?

Эмуляция, короче говоря, предполагает, что одна система имитирует другую. Для Например, если часть программного обеспечения работает в системе A, а не в системе B, мы делаем систему B "эмулируем" работу системы A. Затем программное обеспечение работает на эмуляции системы А.

В этом же примере виртуализация будет включать в себя систему A и разделяя его на два сервера, B и C. Оба этих "виртуальных" серверы представляют собой независимые программные контейнеры, имеющие собственный доступ на программные ресурсы - ЦП, ОЗУ, хранилища и сети - и могут быть перезагружены независимо. Они ведут себя точно так же, как реальное оборудование, и приложение или другой компьютер не сможет сказать разница.

Каждая из этих технологий имеет свои собственные преимущества, преимущества и недостатки.

Эмуляция

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

Интересно, что вы можете запустить виртуальный сервер в эмулированном Окружающая среда. Итак, если эмуляция является такой пустой тратой ресурсов, почему считать это?

Эмуляция может быть эффективно использована в следующих сценариях:

• Запуск операционной системы, предназначенной для другого оборудования (например, Mac программное обеспечение на ПК; консольные игры на компьютере)

• Запуск программного обеспечения, предназначенного для другой операционной системы (работает Mac-специфическое программное обеспечение на ПК и наоборот)

• Запуск устаревшего программного обеспечения после сопоставимого оборудования устареет

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

виртуализация

В нашем примере виртуализации мы можем с уверенностью сказать, что он использует вычислительные ресурсы эффективным, функциональным способом - независимыми их физического расположения или расположения. Быстрая машина с достаточной ОЗУ и достаточное количество хранилища можно разделить на несколько серверов, каждый из которых имеет пул ресурсов. Эта единственная машина, обычно развернутая как один сервер, может затем разместить веб-сервер и почтовый сервер компании. Вычислительные ресурсы, которые ранее недоиспользулись, теперь можно использовать к полному потенциалу. Это может помочь резко сократить расходы.

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

• Широкая совместимость с существующей архитектурой процессора x86

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

• Автономный в каждом случае

Между эмуляцией и виртуализацией ваш бизнес может выполнять большинство виртуальных систем. Хотя обе службы звучат одинаково, все вращается вокруг того, как вы используете программное обеспечение. Если вы хотите, чтобы программное обеспечение чтобы уйти с пути, виртуализация позволяет запускать гостевой код прямо на CPU. И наоборот, эмуляторы будут запускать гостевой код сами, сохраняя CPU для других задач.

qaru.site


 

..:::Новинки:::..

Windows Commander 5.11 Свежая версия.

Новая версия
IrfanView 3.75 (рус)

Обновление текстового редактора TextEd, уже 1.75a

System mechanic 3.7f
Новая версия

Обновление плагинов для WC, смотрим :-)

Весь Winamp
Посетите новый сайт.

WinRaR 3.00
Релиз уже здесь

PowerDesk 4.0 free
Просто - напросто сильный upgrade проводника.

..:::Счетчики:::..