StellatorOS: EntryPoint


Cuando compilamos código en C el compilador decide en que posición del binario debe insertar cada parte de código y datos, hasta ahora eso no ha sido un problema ya que el kernel solo tenía una función, pero conforme vaya creciendo puede que las primeras instrucciones no correspondan con la función main().

 


Autor: kr0m -- 18/06/2020 02:23:19

StellatorOS: Cargando nuestro kernel en C


Ahora que ya tenemos unos vastos conocimientos sobre ASM y C podemos proceder a arrancar nuestro kernel, los pasos a seguir serán:

  • Escribir y compilar el código del kernel
  • Escribir y ensamblar el código del bootloader
  • Crear una imagen de disco que incluya nuestro bootloader y el kernel
  • Cargar el kernel en RAM
  • Cambiar a modo protegido de 32 bits
  • Ejecutar nuestro kernel

 


Autor: kr0m -- 17/06/2020 01:24:04

StellatorOS: Punteros en C


C nos permite utilizar punteros, mediante estas variables podremos almacenar direcciones de memoria en vez de datos directamente, posteriormente se puede hacer referencia a estas direcciones de memoria para escribir o leer en ellas.

 


Autor: kr0m -- 16/06/2020 03:01:07

StellatorOS: Compilación, linkado, gestión de la pila y variables en C


La programación en ensamblador nos permite un control absoluto sobre el hardware, pero avanzar en este lenguaje es un proceso muy lento además nuestro código es tan específico para la CPU que estemos utilizando que lo hace poco portable a otras arquitecturas. Por ese motivo utilizaremos C para la mayoría de código de nuestro SO, en este artículo veremos como C gestiona la pila y la definición de variables.

 


Autor: kr0m -- 15/06/2020 02:09:39

Instalación de GDB-gef en FreeBSD


Gef es un set de comandos y ayudas visuales que hacen que GDB sea mucho mas atractivo, es muy similar a peda pero gef soporta mas arquitecturas: X86, ARM, MIPS, PowerPC y SPARC de este modo si hacemos reversing de firmwares también nos servirá ya que la mayoría de sistemas empotrados llevan un microprocesador MIPS o ARM. Está muy enfocado al reversing pero para debugear también nos será de gran ayuda.


Autor: kr0m -- 13/06/2020 23:30:30

StellatorOS: Entrando a modo protegido 32bits


Para aprovechar la totalidad de la CPU debemos pasar a modo protegido de 32 bits, las funcionalidades extra que nos ofrece este modo son:

  • Registros de 32 bits
  • Dos registros de propósito general adicionales, fs/gs
  • Capacidad de acceder hasta direcciones de memoria 0xffffffff: 4GB
  • Un sistema de memoria segmentada mas avanzado que nos permitirá proteger ciertos segmentos para que las aplicaciones de usuario no tengan acceso a estos
  • Un sistema de memoria virtual para swapear los datos menos utilizados a disco
  • Una gestión de interrupciones mas sofisticada

Autor: kr0m -- 13/06/2020 05:43:03

StellatorOS: Lectura de datos desde disco


Para poder cargar el SO desde nuestro bootloader tendremos que ser capaces de leer desde el disco, almacenar esta información en la memoria RAM y finalmente ejecutar las instrucciones que hemos acabado de cargar, en este artículo aprenderemos como leer y cargar estos datos.

 


Autor: kr0m -- 12/06/2020 02:50:36

StellatorOS: Segmentación de memoria en modo real 16bits


En este artículo aprenderemos como funciona un microprocesador en su fase de arranque mas temprana(modo real 16bits), también comprenderemos porque con un microprocesador que tiene registros de 16 bits no es capaz de direccionar mas de 64KB de RAM y como aumentar este límite a 1MB gracias a la segmentación de memoria.

 


Autor: kr0m -- 11/06/2020 00:12:05

StellatorOS: Funciones en ensamblador


Desde el punto de vista de la CPU una función no es mas que un salto a una dirección de memoria donde se encuentran las intrucciones de una rutina y un salto de retorno a la instrucción inmediatamente posterior al primer salto. En este artículo explicaré como se deben de llamar a las funciones para que sean reutilizables y que sea seguro su uso.

 


Autor: kr0m -- 10/06/2020 01:04:03

StellatorOS: IF-ELSE en ensamblador


Una de las estructuras mas básicas cuando se empieza a programar son las sentencias if, en este artículo explicaré un ejemplo muy sencillo en pseudocódigo y como traducirlo a ensamblador.

 


Autor: kr0m -- 09/06/2020 00:55:54