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 C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Hacer un programa en C que se ejecute sin SO
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Hacer un programa en C que se ejecute sin SO  (Leído 2,559 veces)
n1sen

Desconectado Desconectado

Mensajes: 122



Ver Perfil
Hacer un programa en C que se ejecute sin SO
« en: 19 Noviembre 2017, 00:17 am »

Duda no resuelta, y de paso idea abandonada  :-( Pero si saben como responder, aganlo igual me sirve

Pues eso, esa es mi duda como lo dice el titulo. En VirtualBox logre arrancar con un "bootloader" que programe en assembler, seguiendo una guia que encontre en internet.
El problema es que viendo la guia entera, terminas con mas de 3000 lineas de codigo programadas en assembler, solo para recibir comandos y leer el teclado, algo que en cualquier lenguaje como C puedes hacerlo con algo de 200 lineas o menos.
Asi que la duda seria como compilar un programa en C a un .iso. Nota, el "bootloader" programado en assembler que bootea la maquina debe estar si o si en el mismo .iso o no arranca la maquina. Asi que en teoria, el "bootloader" debe tener una forma de llamar a ese codigo programado en C que leeria y recibiria comandos.

Aca les dejo el codigo del "bootloader" que hice:
Código
  1. EBIOSVIDEOINT       equ 16 ;Servicio de video de la BIOS
  2. EBIOSTTYOUTPUTFN   equ 14 ;Funcion de video TTY (teletipo) de salida de la BIOS
  3.  
  4.    cpu 8086 ;La CPU minima donde puede funcionar este codigo
  5. Start:
  6.            mov ax,cs ;carga el segmento de codigo
  7.            mov ds,ax ;carga el segmento de info.
  8.            call .10
  9.            db 'Hola mundo! ',13,10,0 ;String que se imprimira
  10. .10         pop si
  11.            call PutString ;Llamado a la funcion PutString
  12. .20         hlt
  13.            jmp .20
  14.  
  15. PutString:   mov ah,EBIOSTTYOUTPUTFN ;Funcion de teletipo de la BIOS
  16. .10          lodsb
  17.             or al,al
  18.             jz .20
  19.             int EBIOSVIDEOINT ;llama a la interrupcion de video de la BIOS
  20.             jmp .10 ;repite hasta que termina
  21.             ret ;Retorna a el llamado call PutString
  22. .20



Como ven, muestra en pantalla la cadena "Hola mundo!" y arranca la pc, y lo mejor, se ejecuta directamente en el procesador y la BIOS
La funcion de leer el teclado y recibir comandos, seria hacerlo en C, si lo hacemos en assembler... ya saben.
Si no me entienden mandemen un PM (mensaje privado)
Saludos

PD: Estoy en Linux Mint, nasm como ensamblador de asm.
ah, y los comandos para convertir el codigo en un archivo .img:
Código:
nasm bootloader.asm  -o bootloader.bin
Eso de arriba ensambla en codigo no en un .o si no en un .bin
Código:
dd if=/dev/zero of=floppy.img bs=1024 count=1440
dd if=bootloader.bin of=floppy.img seek=0 count=1 conv=notrunc
Se crea la imagen de disquette (en este caso es el floppy.img que despues ejecutamos como dispositivo de arranque en Oracle VirtualBox.
Solo funciona para Linux, en Windows, no tengo idea como se haria

PD2: Lei por ahi en una pagina de StackOverflow que alguien dijo que "tecnicamente cualquier programa que se ejecute sin SO es un SO".
El texto original estaba en ingles


« Última modificación: 19 Noviembre 2017, 03:10 am por n1sen » En línea

null
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Hacer un programa en C que se ejecute sin SO
« Respuesta #1 en: 19 Noviembre 2017, 00:27 am »

nunca lo he intentado, sin embargo he visto que se pueden usar las librerías standard porque están hechas con este fin...

sin embargo creo que es mejor opción usar el kernel de linux y trabajar sobre el, así te ahorras escribir todas las operaciones de IO, manejo de tareas, memoria, etc... puedes intentar con linux from scratch, que te da un ambiente booteaable 0 de linux


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
n1sen

Desconectado Desconectado

Mensajes: 122



Ver Perfil
Re: Hacer un programa en C que se ejecute sin SO
« Respuesta #2 en: 19 Noviembre 2017, 00:37 am »

Si, pero seria dificil, ya que en si compilar algo de esa embergadura como Linux tardaria mucho, mas peor, mi pc es una papa de solo 2GB de ram... Mi PC no podria compilar eso.
En cambio, si hago lo que intento sabre como funciona perfectamente, ya que yo mismo lo cree, le podria añadir lo que quisiese a diferencia de usar algo ya hecho que no conozco como funciona, terminaria rompiendo todo.
Aunque si no logro avanzar en esto, lo abandonare y quedara como un curioso proyecto mio...  :o
Se que hacer algo como un kernel es dificil.
Saludos
En línea

null
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Hacer un programa en C que se ejecute sin SO
« Respuesta #3 en: 19 Noviembre 2017, 00:42 am »

no, no es alterar el nucleo de linux, si, te toca compilarlo, pero lo que haces es cambiar el proceso  de inicio, así que compilas una sola vez, y cambias tu proceso inicial y listo
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
n1sen

Desconectado Desconectado

Mensajes: 122



Ver Perfil
Re: Hacer un programa en C que se ejecute sin SO
« Respuesta #4 en: 19 Noviembre 2017, 00:44 am »

vale, abandonare la idea, era muy "subrealista" lo que se me ocurrio.
En línea

null
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Hacer un programa en C que se ejecute sin SO
« Respuesta #5 en: 19 Noviembre 2017, 00:55 am »

aquí hay más opciones XD

recomiendan no intentarlo de buenas a primeras con LFS (linux from scratch) porque puede llevar a "caminos oscuros" XD

https://unix.stackexchange.com/questions/122717/custom-linux-distro-that-runs-just-one-program-nothing-else
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines