# Herramientas

## Resumen

&okteta; contiene varias herramientas, algunas para analizar y manipular arrays de bytes y otras para otros propósitos más generales. Estas herramientas se pueden activar o desactivar desde la entrada Herramientas de la barra de menú. Cada herramienta posee un pequeño visor que se puede anclar en cualquiera de las barras laterales o flotar libremente como una ventana. Puede anclar, desanclar, reorganizar y también apilar los visores de las herramientas con el ratón, pulsando el &LMB; sobre la barra de título del visor de la herramienta, moviéndolo como desee y soltando el &LMB; para completar la acción; puede cancelar la operación pulsando la tecla &Esc;.

### Analizadores y manipuladores

Tabla de byte

  La tabla hace un listado de todos los valores posibles de byte, tanto valores de caracteres o numéricos.

  El valor seleccionado puede ser insertado en la posición del cursor para un número definido de bytes. Esto puede ser logrado usando el botón Insertar o haciendo doble clic en la línea de la tabla.

Filtro binario

  El filtro realiza operaciones binarias en los bytes seleccionados. Luego de elegir la operación (AND, OR, ROTATE..) los parámetros, si hay alguno, pueden ser configurados en el cuadro de diálogo que se muestra debajo. El filtro es ejecutado cuando se utiliza el botón Filtro.

Cadenas

  Esta herramienta localiza las cadenas en los bytes seleccionados. Tras escoger una longitud mínima para la cadena y pulsar el botón Extraer, las cadenas se buscarán con la herramienta «grep». Se puede reducir la lista de cadenas mostradas introduciendo algún término para filtrarlas.

Estadísticas

  La herramienta crea una estadística para los bytes seleccionados. La estadística proporciona la frecuencia de aparición de cada byte en la selección. Se puede calcular usando el botón Construir.

Suma de verificación

  Esta herramienta calcula varias sumas de verificación o de «hash» para los bytes seleccionados. Tras escoger el algoritmo y ajustar el parámetro, si hay uno, se calcula la suma al usar el botón Calcular.

Tabla de decodificación

  La tabla muestra los valores del byte o de los bytes comenzando en la posición del cursor para algunos tipos de datos sencillos y comunes, como enteros o valores en coma flotante, así como UTF-8. Si hace doble clic sobre una línea de la tabla se abrirá un editor en el que podrá editar y cambiar el valor.

Estructuras

  Esta herramienta activa la investigación y la edición de arrays de bytes basados en definiciones de estructuras creadas por el usuario. Las instrucciones detalladas están en una sección propia.

### Herramientas generales

Sistema de archivos

  Esta herramienta ofrece un navegador de archivos integrado que se puede usar para seleccionar los archivos a abrir.

Documentos

  Esta herramienta muestra todos los archivos actualmente creados o cargados. Los símbolos marcan el archivo en la vista actualmente activa y también muestran qué archivos contienen modificaciones sin guardar o qué copias almacenadas han sido modificadas por otro programa.

Marcadores

  Esta herramienta se puede usar para gestionar los marcadores de forma alternativa al menú Marcadores.

  Los marcadores son temporales en la actualidad y no se guardan si cierra el array de bytes o el programa.

Información sobre el archivo

  Esta herramienta muestra información sobre el archivo actual, incluyendo su tipo, su ubicación de almacenamiento y su tamaño.

## Herramienta de estructuras

### General

La herramienta de estructuras permite el análisis y la edición de arrays de bytes basados en definiciones de estructuras creadas por el usuario, que se pueden construir a partir de arrays, uniones, tipos primitivos y valores de enumeración.

Posee un diálogo de ajustes propio, que se puede mostrar usando el botón Ajustes. Existen varias opciones que se pueden configurar, como el estilo (decimal, hexadecimal o binario) en el que se muestran los valores. También es posible escoger qué definiciones de estructuras se cargan y qué estructuras se muestran en el visor.

Las estructuras se definen en archivos de definición de estructuras de &okteta; (basados en &XML;, con la extensión `.osd`). Adicionalmente, un archivo `.desktop` contiene metadatos sobre dicho archivo de descripción de estructura, como el autor, su página web y la licencia de uso.

En la actualidad no se pueden crear, editar ni instalar definiciones de estructuras desde dentro del programa, por lo que estas operaciones se deben realizar de forma manual como se describe en las siguientes secciones.

### Instalación de definiciones de estructuras

La herramienta de estructuras comprueba la existencia de descripciones de estructuras en el subdirectorio `share/apps/okteta/structures/` del directorio del usuario para los datos de programas (puede encontrarlo ejecutando ``kde4-config` `--localprefix``). Es posible que tenga que crear este directorio si aún no ha instalado ninguna definición de estructura.

En este subdirectorio existe otro subdirectorio para cada definición de estructura, que contiene tanto el archivo `.desktop` como el archivo `.osd` de la definición.

Por ejemplo, con el directorio de datos de programas `.kde` y una definición de estructura llamada «EstructuraEjemplo», existirá el directorio `.kde/share/apps/okteta/structures/EstructuraEjemplo`, que contendrá los archivos `EstructuraEjemplo.desktop` y `EstructuraEjemplo.osd`.

Si ha instalado una nueva definición de estructura creando dicho subdirectorio con los dos archivos o si los ha editado, tendrá que reiniciar &okteta; y abrir el diálogo de ajustes de la herramienta de estructuras. Seleccione allí la pestaña Gestión de estructuras y asegúrese de marcar la definición de estructura en cuestión. Pulse luego el botón Aplicar cambios, cambie a la pestaña Estructuras y asegúrese de que el elemento en cuestión aparece listado en la parte de la derecha.

### Compartir definiciones de estructuras

No necesita crear una definición para las estructuras comunes, pero sí puede reutilizar alguna definición existente de sitios como kde-files.org.

También es posible que quiera compartir una definición. Para ello, cree un archivo comprimido (por ejemplo, un archivo tar comprimido, `.tg`) que contenga únicamente el subdirectorio con los archivos `.osd` y `.desktop`. Según el ejemplo de la sección anterior, sería el subdirectorio `EstructuraEjemplo`. Si sigue este formato, las futuras versiones de la herramienta de estructuras serán capaces de proporcionar descarga e instalación automáticas de estas definiciones.

### Creación de sus propias definiciones de estructuras

#### La primera definición de estructura

Para comenzar vamos a crear una definición para una estructura de pruebas muy simple que solo contiene tipos de datos enteros (un carácter y un entero de 32 bits). Esto se expresaría en C/C++ del siguiente modo:

              struct simple {
                char aChar;
                int anInt;
              };

El primer paso es escribir el archivo `.osd`, que llamaremos `estructurasencilla.osd`:

              <?xml version="1.0" encoding="UTF-8"?>
              <data>
                <struct name="simple">
                  <primitive name="aChar" type="Char"/>
                  <primitive name="anInt" type="Int32"/>
                </struct>
              </data>

que es bastante similar a la definición de C/C++. El atributo «type» sólo puede ser uno de los siguientes:

- Char
- Int8
- UInt8
- Int16
- UInt16
- Int32
- UInt32
- Int64
- UInt64
- Float
- Double
- Bool8
- Bool16
- Bool32
- Bool64

El siguiente paso es escribir el archivo `.desktop` para los metadatos, que no es más que un conjunto de parejas clave-valor. Se debe llamar `estructurasimple.desktop`. Para este ejemplo, sería semejante a:

              [Desktop Entry]
              Encoding=UTF-8
              Icon=arrow-up
              Type=Service
              ServiceTypes=KPluginInfo

              Name=Estructura de prueba simple
              Comment=Una estructura de prueba muy sencilla que solo contiene dos elementos

              X-KDE-PluginInfo-Author=Alex Richardson
              X-KDE-PluginInfo-Email=alex.richardson@gmx.de
              X-KDE-PluginInfo-Name=estructurasimple
              X-KDE-PluginInfo-Version=1.0
              X-KDE-PluginInfo-Website=http://www.plugin.org/
              X-KDE-PluginInfo-Category=structure
              X-KDE-PluginInfo-License=LGPL
              X-KDE-PluginInfo-EnabledByDefault=false

Estos campos debería resultar autoexplicativos, excepto `X-KDE-PluginInfo-Name`. Este debe tener el nombre del archivo `.osd` como valor (sin el sufijo `.osd`).

Ahora debe crear un subdirectorio `estructurasimple` como se ha descrito anteriormente, copiar los dos archivos en dicho directorio y reiniciar &okteta;.

#### Estructuras más complejas

A continuación crearemos una definición de una estructura más compleja que llamaremos «compleja» y guardaremos en un archivo llamado `compleja.osd`. Esta estructura contendrá dos arrays (uno de longitud fija y otro donde la longitud se determina en tiempo de ejecución), así como una estructura anidada y una unión.

              <?xml version="1.0" encoding="UTF-8"?>
              <data>
                <struct name="compleja">
                  <primitive name="size" type="UInt8" />
                  <union name="aUnion">
                    <array name="fourBytes" length="4">
                      <primitive type="Int8" />
                    </array>
                  </union>
                  <struct name="nested">
                    <array name="string" length="size"> <!-- hace referencia a la longitud del campo anterior -->
                      <primitive type="Char" />
                    </array>
                  </struct>
                </struct>
              </data>

Esto se correspondería con el siguiente pseudocódigo C/C++

    struct complex {
                uint8_t size;
                union aUnion {
                  int8_t fourBytes[4];
                };
                struct nested {
                  char string[size] //no válido en C++, hace referencia a valor de tamaño uint8
                };
              };

Obviamente, solo puede tener campos de referencia a arrays de longitud dinámica antes del propio array.

A continuación creamos el archivo `compleja.desktop` del mismo modo que en el ejemplo anterior (asegúrese de fijar el valor `X-KDE-PluginInfo-Name` correctamente) y haga lo mismo para instalar ambos archivos.

#### Más información

Puede encontrar unas cuantas definiciones de estructuras aquí. Encontrará, por ejemplo, la cabecera de los archivos PNG. Puede encontrar un esquema &XML; que describe la estructura de los archivos `.osd` aquí. Si necesita más información, contacte conmigo en &Alex.Richardson.email;.