Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Vaagish en 10 Diciembre 2013, 00:30 am



Título: Duda sobre maquina virtual
Publicado por: Vaagish en 10 Diciembre 2013, 00:30 am
Buenas! Bueno, mas de uno pensara que estoy loco hablando de maquina virtual acá,, (espero que no)  :P

Estoy repasando ASM, y ahora me surgió una duda existencial, como es que se implementan las maquinas virtuales en Windows? Según tengo entendido, un programa ASM no es portable debido a la restricción de las arquitecturas de los procesadores,,  pero un programa C++ (por ejemplo) si, porque trabaja sobre una "maquina virtual",, es esto así? En que momento se implementa esa maquina virtual?

Saludos!! Gracias!

EDITO: Aca encontre esto mismo:
Citar
http://foro.elhacker.net/asm/duda_concepto_de_maquina_virtual-t359791.0.html

Pero sigo sin entender,, EI dice esto:
Citar
A menos que sea un compilador cruzado siempre compilas a la plataforma en ejecucion, no hay mucha historia ahi ...

Entonces estamos en la misma situación de ASM, C++ tiene que ser tan portable como ASM  :silbar:


Título: Re: Duda sobre maquina virtual
Publicado por: xv0 en 10 Diciembre 2013, 02:39 am
Un porgrama escrito en C/C++ es portable para la arquitectura que soporte el compilador, lee las opciones de gcc y veras, pero en ASM si escribes un codigo para una arquitectura x86 y quieres crear el binario para una sparc64, pues no te va a valer ya que esas instrucciones no existen para la sparc64, tendras que escribir el codigo para esa arquitectura en C/C++ el mismo codigo vale para las dos, simplemente pon las opciones adecuadas para esa arquitectura, pero si estas en una x86 y haces un gcc estandar el binario sera para la x86 logico, y no valdra para la sparc64.

Un saludo.


Título: Re: Duda sobre maquina virtual
Publicado por: Vaagish en 10 Diciembre 2013, 17:14 pm
O sea, yo escribo un código en C/C++ y el compilador lo traduce a código maquina (para la arquitectura en la que se este ejecutando el compilador), entonces es portable en ese sentido, ese binario se puede ejecutar en cualquier pc, con la misma arquitectura. No es necesario cambiar el código para crear el binario, a diferencia del ensamblador, que si necesita cambiar el código para las diferentes arquitecturas..

Es así? Entonces cuando entra en juego la maquina virtual descrita en los libros de ASM? O es todo hipotético?

Saludos!


Título: Re: Duda sobre maquina virtual
Publicado por: MCKSys Argentina en 10 Diciembre 2013, 20:32 pm
Me pareces que estas confudiendo cosas.

A que le llamas Maquina Virtual ?

Por ej., VMWare Workstation te permite crear maquinas virtuales.

Ahora, tambien se le suele llamar maquina virtual a los runtimes que se encargan de interpretar codigo intermedio a fin de ejecutar un programa (por ej. Java, python, .NET, etc.)

Por lo tanto, a cual te refieres?

Saludos!


Título: Re: Duda sobre maquina virtual
Publicado por: Vaagish en 10 Diciembre 2013, 20:47 pm
Citar
Por lo tanto, a cual te refieres?

Creo que seria mas parecido a los runtimes,, no la maquina virtual como VMWare.
Es que en el capitulo 1.2 de "Lenguaje ensamblador para computadoras basadas en Intel" da una teoría de maquina virtual.. a menos que sea del concepto de maquina virtual tipo Java del que habla, ese lo entiendo..

No encontré la pagina para mostrar,, pero seria la pagina 7, Capitulo 1.2

EDITO:Al final creo que si,, que habla de la maquina virtual como Java o .NET, pasa que los mezcla con C++ cuando hace referencia a que son lenguajes de alto nivel, pero en realidad C++ no tiene nada que ver con una maquina virtual..


Título: Re: Duda sobre maquina virtual
Publicado por: xv0 en 10 Diciembre 2013, 21:45 pm
Revise ese libro no me extraña que vengas con dudas, ese libro es malo o al menos lo es para mi, creo tenerlo por aqui, cuando pueda leere eso para asi saber a que te refieres.

Un saludo.


Título: Re: Duda sobre maquina virtual
Publicado por: Vaagish en 10 Diciembre 2013, 23:08 pm
Citar
ese libro es malo o al menos lo es para mi

Mmm.. sinceramente, no se si es que sea malo el libro,, tiene buena información,, pero esa parte me enredo... cosas que pasan también..  :silbar:

Saludos!!


Título: Re: Duda sobre maquina virtual
Publicado por: _Enko en 11 Diciembre 2013, 16:58 pm
Lo que es Virtual PC, Wmware etc... serían más bien EMULADORES de la arquitectura x86/64.

Es decir, lo que hacen es emular una arquitectura. Similar a lo que hace un emulador de la sega genesis o nes, snes etc..
Una ventaja es que la arquitectura x86/64 trae un set  de instrucciones que permite hacer eso con mayor optimidad.
Por ejemplo, en el caso de una NES, el emulador lo que haria es reconocer las instrucciones del chip motorola 6502 y ejecutar la instruccion similar en x86.
En el caso de un emulador/maquina virtual x86, lo que haria es algo similar. Uno pensaria que al ser la misma arquitectura simplemente tomaria cada instruccion y la ejecutaria, pero no es asi.
Si la instruccion es por ejemplo "mov eax, 4" ningun problema, haría exactamente eso.
Pero si la instruccion es por ejemplo "jmp 0x07600" no va hacer eso. Llegas a ejecutar eso en windows y va tirar un lindo error diciendo que no es una instruccion admitida.  Es una instruccion válida de x86, pero no es válida a nivel usuario (ring3) en donde se ejecutan las aplicaciones de windows. (Instruccion de privilegio ring0/kernel). De ahí que el emulador/maquina virtual se encarga de emular esa instruccion.

Por eso mas que "maquina virtual" sería mas bien un emulador de x86. Me imagino que el término "máquina virtual" se refiere mas bien a que crea una "pc/maquina" dentro de tu pc. De ahí "máquina virtual"

 
En cambio, la máquina virtual de java, lo que hace es tomar instrucciones del binario de java (seria una especie de pseudo lenguaje maquina  universal) y ejecutar la instruccion corresponiente en la PC o en cualquier máquina host. (celular, ruter, heladera, etc..)
Es decir, lo que hace Java es complilar en una arquitectura inexistente fisicamente (ningun microchip soporta instrucciones del "binario" java) y luego emularlas en el resto de las arquitecturas utilizando la JVM. El tema es como no existe ningun microchip que ejecute java directamente, tampoco sería correcto decir que está emulando java por mas que el proceso sea parecido.

Finalmente pearl/phyton son interpretes. Es decir, a partir del código no se crea ningun "binario". Las lineas de codigo se transforman a instrucciones en run-time. No hay un binario de por medio. La ventaja es que se pueden hacer unas lineas de codigo exoticas, pero la desventaja la lentitud en el proceso.


Saludos.


Título: Re: Duda sobre maquina virtual
Publicado por: Vaagish en 11 Diciembre 2013, 17:21 pm
Gracias por responder _Enko, buena tu explicación.. mi duda era de interpretación del libro, porque como que mezcla un poco ahí, y me dio a entender que windows usaba una maquina virtual para ejecutar los programas (cosa que me parecía totalmente extraña, teniendo el loader) ya quedo claro jeje

Saludos! Y Gracias!


Título: Re: Duda sobre maquina virtual
Publicado por: _Enko en 11 Diciembre 2013, 17:26 pm
Gracias por responder _Enko, buena tu explicación.. mi duda era de interpretación del libro, porque como que mezcla un poco ahí, y me dio a entender que windows usaba una maquina virtual para ejecutar los programas (cosa que me parecía totalmente extraña, teniendo el loader) ya quedo claro jeje

Saludos! Y Gracias!
Mh... tal vez se refiere que el windows utiliza un emulador para aplicaciones de 16bit. (lo más probable que sea eso)

De nada :)


Título: Re: Duda sobre maquina virtual
Publicado por: Vaagish en 11 Diciembre 2013, 20:54 pm
Citar
Mh... tal vez se refiere que el windows utiliza un emulador para aplicaciones de 16bit. (lo más probable que sea eso)

Nop.. explica como funciona un lenguaje como Java, y la maquina virtual, al final estaba hablando de eso para demostrar porque no es portable ASM y otros lenguajes si.. era sencillo,, yo la entrevere al pedo..  :silbar:

Saludos!


Título: Re: Duda sobre maquina virtual
Publicado por: csp en 12 Diciembre 2013, 16:51 pm
Mmm.. sinceramente, no se si es que sea malo el libro,, tiene buena información,, pero esa parte me enredo... cosas que pasan también..  :silbar:

Saludos!!

Que libro recomendás para aprender asm?

Un saludo.


Título: Re: Duda sobre maquina virtual
Publicado por: Vaagish en 12 Diciembre 2013, 17:59 pm
Yo empece con los tutoriales de de Iczelion, después empece a leer "Lenguaje ensamblador para computadoras basadas en Intel", (después lo deje y ahora lo retome), fíjate en el Entry Point del subforo de ASM hay posteados unos libros que están buenos (supongo), y otros temas ahí mismo al inicio como herramientas y documentación..

Suerte!! Saludos!