System Object Model (formato de archivo)
# System Object Model (formato de archivo)

En informática System Object Model (SOM; en español modelo de objetos de sistema) es un formato propietario de archivos ejecutables desarrollado por Hewlett-Packard para sus sistemas operativos HP-UX y MPE/ix. En particular, SOM es el formato nativo para aplicaciones ejecutables, código objeto y bibliotecas compartidas de 32-bit que corren bajo la familia de procesadores PA-RISC.

Con la introducción de procesadores de 64 bit, Hewlett-Packard adoptó el formato Executable and Linkable Format (ELF) para representar el código de programas de 64 bit, mientras que siguen usando SOM para aplicaciones que corran en modo 32 bit. Luego, con la introducción de la familia de procesadores Itanium, HP-UX ha abandonado el formato SOM en favor de ELF para aplicaciones en 32 y 64 bits.

En HP-UX el formato de archivo SOM a menudo es llamado como el formato a.out y es descrito por estructuras del lenguaje de programación C en el archivo de cabecera /usr/include/a.out.h. Sin embargo el formato SOM no es técnicamente el mismo que el formato a.out estándar, usado por muchos otros sistemas operativos Unix.

## Información general

Un archivo SOM consiste de un registro cabecera de tamaño fijo seguido de un número opcional de secciones. La cabecera siempre se ubica al principio del archivo, y contiene el tamaño y el desplazamiento de bytes de dónde están ubicadas las otras secciones dentro del archivo. A excepción de la cabecera, las otras secciones pueden encontrarse en cualquier lugar en el archivo, aunque la disposición habitual de un archivo SOM (asumiendo que todas las secciones están presentes) es la siguiente:

* Registro de la cabecera
* Registro auxiliar de la cabecera
* Registros de espacio
* Registros subespaciales
* Registros de corrección del cargador
* Espacio de cadenas de texto
* Registros de símbolos
* Registros de correcciones
* Cadenas de símbolos
* Registros del compilador
* Datos para espacios cargables
* Datos para espacios no cargables

Los campos numéricos son almacenados en orden de byte big endian, el orden de bytes nativo de PA-RISC, siendo la mayoría de 32 bits de ancho. Las cadenas de caracteres habitualmente se codifican en ASCII de 8 bits, y ambos precedidos por un indicador de longitud de 32 bits, además de ser terminadas en cero, como las cadenas en C. La mayoría de los registros están alineados por palabra (que comienzan en desplazamientos de n-bytes) con rellenos introducidos cuando sea necesario.

