elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Duda con bootsect.s - Linux
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Duda con bootsect.s - Linux  (Leído 8,320 veces)
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Duda con bootsect.s - Linux
« en: 12 Diciembre 2013, 18:24 pm »

En el archivo bootsect.s (archivo fuente de Linux) dice esto como comentario:

Citar
! bootsect.s is loaded at 0x7c00 by the bios-startup routines, and moves
! itself out of the way to address 0x90000, and jumps there.

o sea, que este es el primer archivo que ejecuta la bios cuando se inicia la pc, no?
Como sabe la bios cual es el primero de todos en ser cargado?
Y por que son archivos ".s"? Son igual de validos si le pongo ".asm"?

Saludos!


En línea

_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: Duda con bootsect.s - Linux
« Respuesta #1 en: 12 Diciembre 2013, 19:34 pm »

La extención no tiene nada que ver.

La bios lo que hace es cargar a esa direccion de memoria (0x7C00) los primeros 512b del disco elegído como aranque. Por eso,

1)A la bios no le interesa que tipo de archivo es... mejor dicho, ni siquiera es un archivo. Son los primeros 512b del disco.
2)Vos lo elegis en el setup de la bios, CD, HD, USB, etc...
3)Estas confundiendo codigo fuente con binario.  La extención no importa. Lo importante que en los primeros 512b se carguen a memoria el resto del bootloader y se salte allí.

Saludos.


En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Duda con bootsect.s - Linux
« Respuesta #2 en: 12 Diciembre 2013, 19:41 pm »

Citar
La bios lo que hace es cargar a esa direccion de memoria (0x7C00) los primeros 512b del disco elegído como aranque.
Bien,, entiendo.. y como se pone el archivo deseado en los primeros 512b del disco elegido?? Cuando uno va a instalar un SO, el archivo ya tiene que estar ahí, en los primeros 512b..


Citar
Estas confundiendo codigo fuente con binario
Por? No es el binario el que se carga en 0x7C00?  :o
En línea

_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: Duda con bootsect.s - Linux
« Respuesta #3 en: 12 Diciembre 2013, 19:57 pm »

1)Hay un par de herramientas que te dejan escribir directamente sobre el disco. Si lo haces sobre tu disco rigido, la pc va dejar de arrancar seguramente.
Si usas una máquina virtual, simplemente haces que tu binario ocupe 1.44mb, en los primeros 512b pones el codigo que necesites. Luego colocas esa imagen como si fuera un disquet virtual y pones para que la maquina virtual arranque desde disquet.

2)Si, pero el codigo fuente puede estar hecho en distintos compiladores/ensambladores.
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Duda con bootsect.s - Linux
« Respuesta #4 en: 12 Diciembre 2013, 20:57 pm »

Gracias por responder otra vez _Enko..

Citar
Si lo haces sobre tu disco rigido, la pc va dejar de arrancar seguramente.
No lo dudo..  :xD

Creo que capte lo que decís.. te cuento la idea, tengo planeado entender el código de Linux, y armar un pseudo sistema operativo.. claro esta, me falta mucho.. pero creo que estoy en camino..

ahora me surgió otra duda, para no abrir otro tema la hago acá..

Como es posible que un SO, el cual contiene instrucciones en ASM funcione sobre diferentes arquitecturas?
Digamos, cuando instala windows, no se fija para que procesador es, simplemente elige de 32 o 64 bits..

Se que debo estar terriblemente equivocado, pero no entiendo..

EDITO:
Se que dije que era una duda, pero.. pregunto,, si hago mi propio boot, y le hago mandar un mensaje en la pantalla, (con interrupciones de la BIOS claro esta..) debería verse no? Solo hago que muestre ese mensaje aclaro, sin mas..

Saludos!
« Última modificación: 12 Diciembre 2013, 21:21 pm por Vaagish » En línea

_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: Duda con bootsect.s - Linux
« Respuesta #5 en: 12 Diciembre 2013, 21:33 pm »

Citar
Creo que capte lo que decís.. te cuento la idea, tengo planeado entender el código de Linux, y armar un pseudo sistema operativo.. claro esta, me falta mucho.. pero creo que estoy en camino..
Te recomendaría leer el manual de intel de arquitectura de sistema.
http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

Y luego algun libro teorico sobre desarollo de sistemas operativos (mas que nada para tener el panorama teorico completo)
Luego para asuntos practicos está la wiki OSDEV.

Citar
Como es posible que un SO, el cual contiene instrucciones en ASM funcione sobre diferentes arquitecturas?
1)Un SO no contiene instrucciones asm, sino instrucciones de lenguaje máquina. Las instrucciones asm son acrónimos a instrucciones de lenguaje máquina para simplificar la cosa. Pero no es lo mismo.

Suponte este ejemplo.
Código:
add eax, ebx
Al ensamblar esto para x86 va generar  0x03c3.
Que para un procesador x86 significa sumar a eax el contenido de ebx.

Pero si ejecutas eso por ejemplo en un celular con arm7 puede pasar dos cosas.
1)que tire un error.
2)que haga algo totalmente diferente.

Si quieres ejecutar el mismo codigo en un procesador arm7 tendras que ensamblar este codigo
Código:
ADD r1,r2
Que va generar una instruccion de 2 o mas bytes (no tengo desensamblador de arm a mano ni ensamblador)
Pero 99.9% seguro que lo que genere el ensamblador de arm no va a ser 0x03c3.


De ahí si tienes siguiendo el ejemplo usando lenguaje C
Código:
varA += varB;
Si compilas ese codigo para x86 va generar algo muy parecido a "add eax, ebx" o tal vez algo diferente pero con el mismo sentido. Depende del contexto, de la optimizacion del compilador. Si el compilador es bueno y tiene buena optimizacion, y esa linea de codigo es codigo basura totalmente irrelevante para lo que se esté haciendo, tal vez ni genere nada.

La ventaja es que puedes tomar ese mismo codigo en C, usar un compilador de C para ARM y te va generar la instruccion correspondiente para un procesador ARM.

Esa es la diferencia, si escribes en asm para x86, terminas teniendo siempre binarios para x86.
Pero si usas C por ejemplo, depende para que estes compilando es el binario que termines obteniendo.


Citar
Se que dije que era una duda, pero.. pregunto,, si hago mi propio boot, y le hago mandar un mensaje en la pantalla, (con interrupciones de la BIOS claro esta..) debería verse no? Solo hago que muestre ese mensaje aclaro, sin mas..
Totalmente. Te alcanzaría con un:
"org 0x7c00"
"llamar a la interrupcion que necesites".
y listo.
El tema es meter ese codigo en el bootsector del disco.
Yo en mi práctica me resulto cómodo wmware, hacer que mi código ocupe 1.44mb y cargarlo como disquet.
« Última modificación: 12 Diciembre 2013, 21:42 pm por _Enko » En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Duda con bootsect.s - Linux
« Respuesta #6 en: 12 Diciembre 2013, 22:10 pm »

Fa, se cerro la sesión y perdí todo lo escroto

Decía algo así.. Sos un capo Enko, muchas gracias! Yo estoy usando VirtualBox, pero cuando cree la maquina virtual, no le dije que SO era, lo deje como desconocido, capaz me complica la vida, sera cuestión de probar..

Quedo claro como el agua! Ya estoy bajando el manual de Intel!

Citar
Totalmente. Te alcanzaría con un:
"org 0x7c00"
"llamar a la interrupcion que necesites".
y listo.
El tema es meter ese codigo en el bootsector del disco.
Yo en mi práctica me resulto cómodo wmware, hacer que mi código ocupe 1.44mb y cargarlo como disquet.

Ya quiero empezar con la mia! I'm euphoric!  ;D
En línea

_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: Duda con bootsect.s - Linux
« Respuesta #7 en: 12 Diciembre 2013, 22:20 pm »

Citar
Decía algo así.. Sos un capo Enko, muchas gracias! Yo estoy usando VirtualBox, pero cuando cree la maquina virtual, no le dije que SO era, lo deje como desconocido, capaz me complica la vida, sera cuestión de probar..
Na, eso ló único que hace es fijar la cantidad  de ram que va usar la máquina virtual. Siempre luego lo puedes cambiar a mano.

VirtualBox es quisquilloso con las imagenes de disquet. Creo que te obliga a que tengan un formato fat valido.

Una opcion que no he utilizado sería tomar una imagen de un disquet valido y simplemente usando un editor hexadecimal reemplazar a mano el inicio con el binario de tu codigo.
Bah, en realidad hay herramientas para eso pero ni idea cuales son.


Citar
Fa, se cerro la sesión y perdí todo lo escroto
Alerta, Alerta!!!!
Se han descubierto seciones de elhacker que castran!!!!
Se recomienda a toda la población masculina de hackers mantener "todo lo escroto" lejos de este tipo de sesiones.
« Última modificación: 12 Diciembre 2013, 22:26 pm por _Enko » En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Duda con bootsect.s - Linux
« Respuesta #8 en: 12 Diciembre 2013, 22:32 pm »

Citar
Alerta, Alerta!!!!
Se han descubierto seciones de elhacker que castran!!!!
Se recomienda a toda la población masculina de hackers mantener "todo lo escroto" lejos de este tipo de seciones.

Jajaja se,, es que te queres cortar un testículo cuando pasa eso  :xD

Bueno, voy a probar,, voy a hacer mis pruebas,, dentro de 10 años saco el SO..   :laugh:
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Duda con bootsect.s - Linux
« Respuesta #9 en: 20 Diciembre 2013, 00:06 am »

Capaz tendría que haber abierto otro tema, pero este no es tan viejo,, asi que le metemos acá  ::)

Citar
Totalmente. Te alcanzaría con un:
"org 0x7c00"
"llamar a la interrupcion que necesites".
y listo.

Estoy teniendo problemas con esto.. estoy en masm32,, cuando uso org 7C00h lo que hace es estirar el código un montón, en vez de desplazarlo a esa posición,, alguna sugerencia como hacer lo mismo pero si agrandar el archivo final??

PD: Cuando digo que org estira el codigo lo que hace es llenar con 0's la cantidad "deseada", por ejemplo, eso me puede servir para llegar a los 512 bytes que necesito...  :silbar:



EDITO:Na, perdón la molestia,, recién encontré algo que puede funcionar, pero no lo entiendo,, si alguien me lo explica, yo agradecido..

Código
  1. mov ax, 0x07c0
  2. mov ds, ax
Dice que tiene el mismo resultado que ORG 0x7C0, Yo que se.. no lo entiendo..
« Última modificación: 20 Diciembre 2013, 00:13 am por Vaagish » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda linux
Dudas Generales
nobelot 4 2,732 Último mensaje 27 Diciembre 2010, 17:13 pm
por Devilboy.Devil
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines