Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2015.10.04;
Скачать: [xml.tar.bz2];

Вниз

Что есть "виртуальная машина"   Найти похожие ветки 

 
KSergey ©   (2015-02-06 09:13) [0]

Здесь есть люди, которые в своих программах используют то, что называют "виртуальной машиной".

У меня вопрос для расширения кругозора: чем "виртуальная машина" должно отличаться от "встроенного интерпретатора", например, чтобы иметь право называться "виртуальной машиной"?


 
icWasya ©   (2015-02-06 09:31) [1]

Если "в своих программах", то ничем.
Иначе https://ru.wikipedia.org/wiki/Виртуальная_машина


 
Rouse_ ©   (2015-02-06 09:35) [2]

Это и есть встроенный интерпретатор


 
KSergey ©   (2015-02-06 10:07) [3]

Спасибо, парни, вы избавили меня от комплекса.


 
DVM ©   (2015-02-06 11:36) [4]


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

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

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


 
KSergey ©   (2015-02-06 12:05) [5]

> DVM ©   (06.02.15 11:36) [4]

Вы меня извините, но, по-моему, это формализм.
Как разницу это модно рассматривать в смысле изучения методик построения, но на суть - на на мой взгляд - это не влияет: есть алгоритм (интерпретатор, исполнитель байт-кода), поведение которого управляется данными (текстом на BASIC, пресловутым байт-кодом с готовыми "номерами" вызываемых функций).

Или я не углядываю какую-то разницу?

Я вообще думал, что быть может под "виртуальной машиной" подразумевается кусок кода, помещенный в какую-либо более-менее защищенную область, где он
а) не влияет на работу другого, основного кода (может останавливаться с ошибками или просто идти в разнос)
б) на него не влияет работа другого кода (основная программа может пойти вразнос - но вирт. машина будет стабильно работать, выполняя какие-то важные и критичные бизнес-функции)
в) вирт. машина как-то защищена от отладки, от вирусов, от отключения и т.д.

Но по-большому счету все это ведь вполне применимо и к интерпретатору, вопрос лишь в качестве его реализации и поставленных задачах...

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


 
DVM ©   (2015-02-06 13:22) [6]


> KSergey ©   (06.02.15 12:05) [5]


> Вы меня извините, но, по-моему, это формализм.


> Или я не углядываю какую-то разницу?

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

Ну конечно в самом общем смысле разницы  между ними конечно нет. И тот и другой выполняют алгоритм.


 
Rouse_ ©   (2015-02-06 14:07) [7]


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

Важное это то, что для начала разбора интерпретируемого кода нужно сначала разобрать инструкции интерпретатора (как правило первый барьер).
А уж что он там интрепретирует, байт код или что другое - это уже вторая часть.
Вот к примеру разбор защиты, где в качестве первого уровня выступает интерпретатор брейнфака.
http://habrahabr.ru/post/218887/


> Задача интерпретатора шире - он как правило сначала должен
> построчно или по словам преобразовать запись программы на
> языке программирования в байт код виртуальной машины, которая
> его уже будет исполнять.

Нет, для этого используются другие инструементы, интерпретатор работает с уже подготовленными данными.


 
DVM ©   (2015-02-06 14:25) [8]


> Rouse_ ©   (06.02.15 14:07) [7]


> Нет, для этого используются другие инструементы, интерпретатор
> работает с уже подготовленными данными.

Тогда нам надо определиться с тем, что есть интерпретатор. На мой взгляд задача  интерпретатор как раз и состоит в разборе исходного текста и выполнении оного на лету.
Не могут здесь быть какие либо "другие средства". Интерпретатор и есть в одном флаконе сканер, лексический, синтаксический, семантический анализаторы + виртуальная машина для исполнения байт кода.


 
Rouse_ ©   (2015-02-06 14:44) [9]

Возьми Visual Basic - лексический, синтаксический, семантический анализаторы сидят в среде + генератора байткода, а интерпретатор байткода (VM) в экзешнике.


 
Rouse_ ©   (2015-02-06 14:47) [10]

А если же рассматривать какие нибудь движки исполняющие скрипты (Pascal Scrypt тот-же), то тогда да - все это в одной куче лежит, но такие вещи уже не применяются для защиты ПО.


 
DVM ©   (2015-02-06 14:57) [11]


> Rouse_ ©   (06.02.15 14:44) [9]


> Возьми Visual Basic - лексический, синтаксический, семантический
> анализаторы сидят в среде + генератора байткода, а интерпретатор
> байткода (VM) в экзешнике.

Ты все переставил местами, имхо :)
В среде сидит компилирующий интерпретатор, а в экзешнике (точнее vbrunXXX.dll кажется так она называется) - виртуальная машина.


 
DVM ©   (2015-02-06 15:16) [12]


> KSergey ©   (06.02.15 12:05) [5]


> Я вообще думал, что быть может под "виртуальной машиной"
> подразумевается кусок кода, помещенный в какую-либо более-
> менее защищенную область, где он
> а) не влияет на работу другого, основного кода (может останавливаться
> с ошибками или просто идти в разнос)
> б) на него не влияет работа другого кода (основная программа
> может пойти вразнос - но вирт. машина будет стабильно работать,
>  выполняя какие-то важные и критичные бизнес-функции)
> в) вирт. машина как-то защищена от отладки, от вирусов,
> от отключения и т.д.

a) Зависит от реализации этой самой машины. Если в ней есть команды, позволяющие обратиться к чему либо за пределами памяти, отведенной виртуальной машине, или в реализации есть ошибки, такое поведение допускающие, то виртуальная машина может "пойти в разнос", как ты сказал.
б) Виртуальная машина это просто цикл и в этом цикле последовательно считываются операнды и операции и стека (если это стековая машина) и операции применяются к операндам, результат возвращается в стек. Все. Будет работать цикл - будет работать виртуальная машина. И тут нет никакой магии.
в) Не более, чем весь остальной код. Если часть логики программы вынесена скрипты выполняющиеся на виртуальной машине, то задача взломщика, имхо, несколько усложняется тем, что ему, вероятно, надо будет вникнуть в логику работы самой виртуальной машины (могу ошибаться, я в этом не спец).


 
Rouse_ ©   (2015-02-06 16:21) [13]


> DVM ©   (06.02.15 14:57) [11]
> Ты все переставил местами, имхо :)

Я так не думаю :)


 
Dennis I. Komarov ©   (2015-02-06 18:09) [14]

[офф]
Виртуальная машина - это такая машина, которая как бы есть.
[/офф]


 
KSergey ©   (2015-02-16 13:33) [15]

> Rouse_ ©   (06.02.15 14:07) [7]
> Вот к примеру разбор защиты, где в качестве первого уровня
> выступает интерпретатор брейнфака.
> http://habrahabr.ru/post/218887/

Никак не могу понять вот этот момент:

"сокрытие логики исполнения алгоритма приложения в теле виртуальной машины."

Почему просто код -это просто код, а в теле вирт. машины - это вот сразу сокрытие?


 
Rouse_ ©   (2015-02-16 14:02) [16]

Потому что в данном случае кода нет :)
Ты почитай статью, там все это максимально разжевано и как он представлен и как его оттуда достать и как потом анализировать.


 
virex(home) ©   (2015-02-16 22:27) [17]

>KSergey ©   (06.02.15 09:13) [0]
> чем "виртуальная машина" должно отличаться от "встроенного интерпретатора", например, чтобы иметь право называться "виртуальной машиной"?


возможно наличием понятия "хоста": виртуальная машина потому и виртуальная, что по отношению к нативной среде - она гостевая.

т.е. виртуальная машина это гостевая машина работающая в хостевой (нативной/текущей)


 
Юрий Зотов ©   (2015-02-17 00:33) [18]

Блин, о чем тут люди говорят... жизни вы, хлопцы, не знаете...

"Виртуальная машина"  - это любая машина фирмы АВТОВАЗ. Потому что ты думаешь, что машина у тебя есть, а на самом деле ее нет.

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

Вариант - заводится и даже едет, но по дороге ломается и уже не едет. Что еще хуже - машины все равно нет, а головная боль уже появилась. Причем совсем не виртуальная.


 
KSergey ©   (2015-02-17 09:34) [19]

> virex(home) ©   (16.02.15 22:27) [17]
> возможно наличием понятия "хоста": виртуальная машина потому
> и виртуальная, что по отношению к нативной среде - она гостевая.

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


 
KSergey ©   (2015-02-17 09:35) [20]

> Rouse_ ©   (16.02.15 14:02) [16]
> Потому что в данном случае кода нет :)

Не понял, но постараюсь еще раз внимательнее дочитать )


 
Rouse_ ©   (2015-02-17 09:54) [21]


> KSergey ©   (17.02.15 09:35) [20]

Ну если на пальцах реального кода там всего 70 строчек, все остальное в виде зашифрованного пикода. Чтобы его преобразовать в нативный код, нужно расшифровать пикод, разобрать логику VM, дизассемблировать пикод в нативный формат, но... даже этого мало - этим мы просто развернем виртуалку в натив, а сама логика разбирается уже посредством построения графа выполнения, проанализироваа который можно получить изначальный код.


 
Rouse_ ©   (2015-02-17 09:55) [22]


> Юрий Зотов ©   (17.02.15 00:33) [18]
> Блин, о чем тут люди говорят... жизни вы, хлопцы, не знаете.
> ..
>
> "Виртуальная машина"  - это любая машина фирмы АВТОВАЗ

Юр, это ведро с гайками, а не виртуальная машина :)


 
Германн ©   (2015-02-18 03:02) [23]


> это ведро с гайками, а не виртуальная машина :)

Так разве твоя задача не состоит в том, чтобы превратить часть программы в "ведро с гайками", которое таки ездит. Но как ездит и почему - хз.
:)


 
brother ©   (2015-02-18 07:32) [24]

[21] те виртуальная машина это фактически интерпретатор кода в памяти для некого приложения содержащего в себе (или запушеного из) VM и использующий ресурсы нативной ОС? О_о


 
KSergey ©   (2015-02-18 15:20) [25]

Я понял.
Виртуальная машина нужна для обхода защиты "вот тут - данные, вот тут - исполняемый код"


 
virex(home) ©   (2015-02-19 06:28) [26]

>KSergey ©   (17.02.15 09:34) [19]
> > virex(home) ©   (16.02.15 22:27) [17]
> > возможно наличием понятия "хоста": виртуальная машина потому
> > и виртуальная, что по отношению к нативной среде - она гостевая.
>
> Так можно прийти к тому, что нет физической машины вообще


можно, но это не мешает определению объяснять понятие "виртуальная машина"

такое определение не зависит от уровня абстрагирования


 
Rouse_ ©   (2015-02-19 12:44) [27]


> brother ©   (18.02.15 07:32) [24]

Ну... как-то так, да. Только не для некоего приложения - это и есть сам код приложения, реализующий интерпретатор пикода.


 
DVM ©   (2015-02-19 12:48) [28]


> brother ©   (18.02.15 07:32) [24]

Ничто кстати не мешает одной виртуальной машине существовать внутри другой. Так что утверждение про нативную ОС в которой выполняется виртуальная машина не всегда справедливо.


 
brother ©   (2015-02-19 12:59) [29]

хм, как-то не подумал, все это матрица)


 
han_malign ©   (2015-02-19 14:30) [30]


> объяснять понятие "виртуальная машина"

- ВМ обычно характеризуется
https://ru.wikipedia.org/wiki/Полнота_по_Тьюрингу
- а для вышепреведенного прикладного использования будет достаточно и
https://ru.wikipedia.org/wiki/Конечный_автомат


 
NailMan ©   (2015-02-19 21:14) [31]

> [28] DVM ©   (19.02.15 12:48)
> Ничто кстати не мешает одной виртуальной машине существовать
> внутри другой. Так что утверждение про нативную ОС в которой
> выполняется виртуальная машина не всегда справедливо.

Помешает. Среда виртуализации не встанет на виртуалку - просечет что не физический хост. Даже если одного производителя пытаться поставить внутри другого. Если конечно не говорить о Java внутри VMWare/Hyper-V - это не в счет - это фейк, а не виртуальная машина.

Хотя есть вариант сделать финт ушами - у Hitachi на x86 блейдах можно применить фирменную аппаратную виртуализацию LPAR подобно той что на Power-серверах IBM делается. Но это исключение из правил и скорее все таки тоже не в счет.


 
Юрий Зотов ©   (2015-02-19 23:25) [32]

О, развели дискуссию. Кто ответит на сабж одним словом?


 
Германн ©   (2015-02-20 01:56) [33]

Удалено модератором


 
Inovet ©   (2015-02-20 03:01) [34]

Удалено модератором


 
KSergey ©   (2015-02-20 08:21) [35]

> NailMan ©   (19.02.15 21:14) [31]

Вы путаете конкретную реализацию со встроенной проверкой и само понятие вирт. машины.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2015.10.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.002 c
15-1422180830
AndrewAndrey
2015-01-25 13:13
2015.10.04
Ошибка при запуске приложения 0xc0000005


15-1424035886
Юрий
2015-02-16 00:31
2015.10.04
С днем рождения ! 16 февраля 2015 понедельник


1-1333000560
Unknown user
2012-03-29 09:56
2015.10.04
TInterfacedObject борьба с circular references


1-1298814998
Akad
2011-02-27 16:56
2015.10.04
TPicture.LoadFromFile - интерпритация формата по содержимому.


15-1423574803
Pavia
2015-02-10 16:26
2015.10.04
Грамотные книги.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский