Tema destacado: [AIO elhacker.NET] Compilación herramientas análisis y desinfección malware
Autor
|
Tema: ASM, arquitecturas y procesadores compatibles (Leído 1,753 veces)
|
GeorgArming
Desconectado
Mensajes: 236
|
Según tengo entendido, cuando se crea un OS, éste es específico de una arquitectura determinada, no es portable. Tendrías que cambiar el código ASM para adaptarse a la nueva arquitectura.
Mi pregunta es si hay algún tipo de sintaxis ASM que sea multiplataforma. Por ejemplo, que funcione con procesadores Intel, con ARM,... (O alguna arquitectura multiplataforma). ¿Sabéis algo de eso?
Otra cosa, leí sobre un programador que hizo un OS muy simple pero multiplataforma, basándose en la arquitectura ewa. ¿Sabéis si esta arquitectura es verdaderamente compatible con todos los procesadores?
Básicamente, la pregunta es: hay alguna manera de programar un OS que sea portable a todas las arquitecturas?
|
|
|
|
|
En línea
|
Quieres colaborar con un proyecto innovador? Si sabes C/C++, lenguajes web o entiendes de Linux y Debian, ponte en contacto conmigo a través del foro o por gmail: georgarming@gmail.com
|
|
|
RHL
Conectado
Mensajes: 966
mental
|
como tu lo has dicho no es portable, por ejemplo el so windows se adapta a todas las pc porque trae varios páquetes de drivers, para que instala dependiendo del hardware, por eso si te has fijado tambien existe el winx86 y el winx64 eso es para aprovechar la nueva arquitectura de microprocesadores x64. programas talves podrian pero SO's hasta donde sé no. con los programas podrias depender de algunas librerias del SO pero como eso tambien estaria dependiendo del SO
|
|
|
|
|
En línea
|
|
|
|
GeorgArming
Desconectado
Mensajes: 236
|
¿entonces se tiene que programar un OS distinto para cada arquitectura? ¿seguro que no hay ninguna manera, aunque quede un OS muy minimalista, de que sea "universal"?
y, entonces, ASM no es portable a distintos procesadores... pero si programas íntegramente en C sí tendría que serlo, no?
|
|
|
|
|
En línea
|
Quieres colaborar con un proyecto innovador? Si sabes C/C++, lenguajes web o entiendes de Linux y Debian, ponte en contacto conmigo a través del foro o por gmail: georgarming@gmail.com
|
|
|
GeorgArming
Desconectado
Mensajes: 236
|
me he estado documentando, y he encontrado algo muy interesante, que ya mencioné anteriormente. se trata de la arquitectura ewa.
resumiendo, se trata de arrancar una especie de máquina virtual directamente sobre el procesador, y a partir de ahí arrancar el OS. ¿Qué pensáis?
|
|
|
|
|
En línea
|
Quieres colaborar con un proyecto innovador? Si sabes C/C++, lenguajes web o entiendes de Linux y Debian, ponte en contacto conmigo a través del foro o por gmail: georgarming@gmail.com
|
|
|
pucheto
Desconectado
Mensajes: 214
|
¿entonces se tiene que programar un OS distinto para cada arquitectura? ¿seguro que no hay ninguna manera, aunque quede un OS muy minimalista, de que sea "universal"?
y, entonces, ASM no es portable a distintos procesadores... pero si programas íntegramente en C sí tendría que serlo, no?
El tema es que cada arquitectura tiene un juego de instrucciones distinto, y tiene estructuras y registros del procesador distintos... Lo que si se hace es tener la mayoria del codigo en C y solo una parte lo mas minima posible en ASM, asi a la hora de portar el codigo no hay q cambiar todo.
|
|
|
|
|
En línea
|
|
|
|
GeorgArming
Desconectado
Mensajes: 236
|
El tema es que cada arquitectura tiene un juego de instrucciones distinto, y tiene estructuras y registros del procesador distintos... Lo que si se hace es tener la mayoria del codigo en C y solo una parte lo mas minima posible en ASM, asi a la hora de portar el codigo no hay q cambiar todo.
vale, es eso a lo que me refería. y una pregunta, y si hubiera un bootloader en ASM que cargase un programa en C... la parte en C sería portable, no? si incluyes ASM en C inline y lo compilas, es portable?
|
|
|
|
|
En línea
|
Quieres colaborar con un proyecto innovador? Si sabes C/C++, lenguajes web o entiendes de Linux y Debian, ponte en contacto conmigo a través del foro o por gmail: georgarming@gmail.com
|
|
|
Unbr0ken
Desconectado
Mensajes: 248
|
Respondiendo a la pregunta principal: Subjetivamente diría que sí es posible. Mi afirmación se basa en el proyecto eWa. Claro está que mi opinión es relativamente cierta. Veamos el esquema eWa... Visto ésto, diría yo que sí es posible hacer un sistema multiplatafórmico, no obstante, con una imagen no se puede asegurar una afirmación; aquí te dejo el enlace del Proyecto eWa. (Le veo muy bueno, pero... tengo que profundizar un poco más para saber de qué va éste) Espero le des una hojeada, a lo mejor te sirva de algo  . P.D.: Aquí está el cómo funciona su arquitectura, no está culminado, pero... es la idea principal. Salud.
|
|
|
|
|
En línea
|
Discutir con desconocidos por internet es un ejercicio de imbéciles; todos acaban siendo quinceañeros arrogantes con cantidades infinitas de tiempo libre. NO resuelvo dudas vía MP, para algo está el foro.
|
|
|
GeorgArming
Desconectado
Mensajes: 236
|
muchísimas gracias, Unbr0ken. yo ya sabía de la arquitectura ewa, pero que alguien que entienda del tema lo explique te dice mucho sobre el valor de dicha arquitectura. además, esta imagen no la había encontrado...
|
|
|
|
|
En línea
|
Quieres colaborar con un proyecto innovador? Si sabes C/C++, lenguajes web o entiendes de Linux y Debian, ponte en contacto conmigo a través del foro o por gmail: georgarming@gmail.com
|
|
|
GeorgArming
Desconectado
Mensajes: 236
|
entonces me voy a documentar con el tema ewa.
otra cosa que se me ha ocurrido. hay varias máquinas virtuales. seguro que alguna está programada íntegramente en C. como C es portable, si se cargara de inicio esa máquina virtual, y en esa máquina virtual se creara un OS... sería portable, no?
|
|
|
|
« Última modificación: 30 Noviembre 2011, 23:31 por GeorgArming »
|
En línea
|
Quieres colaborar con un proyecto innovador? Si sabes C/C++, lenguajes web o entiendes de Linux y Debian, ponte en contacto conmigo a través del foro o por gmail: georgarming@gmail.com
|
|
|
pucheto
Desconectado
Mensajes: 214
|
vale, es eso a lo que me refería. y una pregunta, y si hubiera un bootloader en ASM que cargase un programa en C... la parte en C sería portable, no?
si incluyes ASM en C inline y lo compilas, es portable?
Si incluis el ASM inline no es portable. El tema con las maquinas virtuales es muy relativo, vos podes hacer un sistema operativo para correr sobre una arquitectura virtual, pero estas atado a esa arquitectura virtual (no sos portable entre arquitecturas, dependes de estar corriendo sobre la maquina virtual). Y la maquina virtual, en algun momento va a tener q manejar registros especificos de cada procesador, manejar interrupciones (las estructuras para manejar interrupciones son distintas en cada procesador), etc. Podes tratar de alejarte lo mas que puedas del procesador, pero en algun momento alguien va a tener q manejarlo, seas vos, la maquina virtual, etc.
|
|
|
|
|
En línea
|
|
|
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
Podríamos decir que tenemos los siguientes niveles de programación:
Lenguaje Alto nivel <-Nivel 5 Lenguaje ensamblador <-Nivel 4 Sistema operativo <-Nivel 3 Arquitectura del conjunto de instrucciones <-Nivel 2 Microarquitectura <-Nivel 1 Lógica digital <-Nivel 0
Desde el nivel 2 es en donde el usuario puede comenzar a programar, este nivel es en donde se trabaja bajo instrucciones binarias
La única posibilidad a mi parecer sería crear una Máquina virtual (todos sabemos que las máquinas virtuales son creadas para facilitar al programador con instrucciones mucho más cómodas), un ejemplo claro de ella es cualquier computador que tenga instalado VJM (Virtual java machine) podrá ejecutar aplicaciones java sin importar la Arquitectura del procesador, esto debido a que el código va descendiendo hasta llegar a la lógica digital en donde se interpretará las instrucciones.
El paso de un nivel a otro se puede realizar a través de dos métodos:
1-Traducción: la traducción consiste en que un programa traduzca un lenguaje a un nivel inferior, este programa debe estar hecho con el lenguaje del nivel anterior para que puede ser interpretado.
2-Interpretación: consiste en que mientras el programa está siendo ejecutado las instrucciones son interpretadas en los otros lenguaje
en ambos métodos los lenguajes deben ser progresivos ya que el tiempo de Interpretación o Traducción podría relentizar el proceso de ejecución de este debido a la pérdida de tiempo que se demorará en pasar de un lenguaje a otro
El gran problema es que con anterioridad se debe tener instalada la máquina virtual y para lograr eso la única forma de poder instarla es que este sea instalado con un lenguaje inferior. Esto puede ser problema si queremos diseñar un virus multiplataforma o programas de ese estilo, pero si nos enfocamos en la programación comercial la creación de una máquina virtual solucionaría el problema, pero insisto que la máquina virtual debería ser programada para cada arquitectura por lo que se convertiría en lo mismo
Saludos
|
|
|
|
|
En línea
|
|
|
|
GeorgArming
Desconectado
Mensajes: 236
|
vale, comprendo. última pregunta (de momento XD): ¿el lenguaje C es portable? es decir, un programa en C que no tenga ninguna instrucción en ASM, es portable, no?
EDITO: otra pregunta (y no digo que es la última porque a saber XD): si cada arquitectura requiere un ASM diferente, cómo es que cuando vas a descargarte ubuntu sólo te dan 2 opciones (32 bits y 64 bits)? ¿eso significa que da igual que sea x86 o otra arquitectura y, por tanto, este ubuntu que te descargas es portable? ¿cómo es posible que cuando vayas a descargarte el kernel linux sólo haya un tipo de kernel (no hay kernel versión 2.5 de x86, ARM,... sólo hay kernel 2.5)?
|
|
|
|
« Última modificación: 1 Diciembre 2011, 20:53 por GeorgArming »
|
En línea
|
Quieres colaborar con un proyecto innovador? Si sabes C/C++, lenguajes web o entiendes de Linux y Debian, ponte en contacto conmigo a través del foro o por gmail: georgarming@gmail.com
|
|
|
GeorgArming
Desconectado
Mensajes: 236
|
más concretamente:
"La Portabilidad del núcleo Linux y arquitecturas soportadas, se refiere a que originalmente escrito para procesadores Intel i386, el núcleo Linux fue recodificado para facilitar la portabilidad de éste. Habiendo sido reescrito una vez para la arquitectura Motorola 68K, la perspectiva de las tediosas reescrituras para cada arquitectura posible, incitada por Linus Torvalds, se enfocaba en poseer una base de código modular que pudiese ser portada hacia diferentes arquitecturas con un mínimo de esfuerzo. Carpetas específicas de arquitectura en las fuentes del núcleo, se dirigen a detalles particulares de cada procesador soportado, mientras todas las ventajas radican el en hecho de compartir un idéntico código de núcleo."
|
|
|
|
|
En línea
|
Quieres colaborar con un proyecto innovador? Si sabes C/C++, lenguajes web o entiendes de Linux y Debian, ponte en contacto conmigo a través del foro o por gmail: georgarming@gmail.com
|
|
|
|
skapunky
|
vale, comprendo. última pregunta (de momento XD): ¿el lenguaje C es portable? es decir, un programa en C que no tenga ninguna instrucción en ASM, es portable, no?
El lenguaje C es universal pero no portable, a ver si me explico: Si tu programas directamente en la ROM del procesador en C éste programa debe tener enlazada una libreria del procesador que uses, no es lo mismo un intel, que un AMD un Zilog Z80... Este "include" simplemente defines cada parámetro del C a una dirección de memória donde evidentemente depende el procesador esta cambia. El asm independiemente que cambie según la arquitectura, se le defínen igualmente posiciónes de memória. Por ejemplo las llamadas IRQ's que procesan en general los perfiféricos cada una tiene una dirección de memória (te lo digo como ejemplo).
|
|
|
|
|
En línea
|
|
|
|
GeorgArming
Desconectado
Mensajes: 236
|
El lenguaje C es universal pero no portable, a ver si me explico: Si tu programas directamente en la ROM del procesador en C éste programa debe tener enlazada una libreria del procesador que uses, no es lo mismo un intel, que un AMD un Zilog Z80... Este "include" simplemente defines cada parámetro del C a una dirección de memória donde evidentemente depende el procesador esta cambia.
El asm independiemente que cambie según la arquitectura, se le defínen igualmente posiciónes de memória. Por ejemplo las llamadas IRQ's que procesan en general los perfiféricos cada una tiene una dirección de memória (te lo digo como ejemplo).
vale, te entiendo. ¿pero entonces cómo es que sólo hay una versión del kernel linux?
|
|
|
|
|
En línea
|
Quieres colaborar con un proyecto innovador? Si sabes C/C++, lenguajes web o entiendes de Linux y Debian, ponte en contacto conmigo a través del foro o por gmail: georgarming@gmail.com
|
|
|
|
|