Krypton Solid

Krypton Solid
Krypton Solid

La última tecnología en raciones de 5 minutos

Desmontaje básico: decodificación del código de operación

Desmontar el código objeto es un arte que desaparece. Sin embargo, sigue siendo una habilidad valiosa para los técnicos que tienen que revisar los vertederos, incluso si pueden acceder a la fuente original. Este consejo es una breve introducción destinada a ayudar al principiante a decodificar el código de operación de instrucción (código de operación).

En este consejo, hago referencia a los Principios de operaciones de la arquitectura z / (PROPS) y el Resumen de referencia de la arquitectura z /. Los números de página que se mencionan más adelante son de esos documentos y pueden cambiar con versiones posteriores de los manuales. Este consejo también presupone cierto conocimiento práctico de la arquitectura de la máquina Z y el lenguaje ensamblador.

Los basicos
El desmontaje comienza con la decodificación del código de operación de la instrucción. El código de operación es parte de la instrucción en lenguaje de máquina que define la operación que se está realizando y, a menudo, incluye uno o más operandos sobre los que trabajará la instrucción.

Puede encontrar una lista de formatos de instrucción en el Resumen de referencia de arquitectura. PROPS enumera el formato con cada instrucción en los capítulos siete al 11.

El formato de instrucción se dibuja como un rectángulo que se divide en cuadros que representan campos. Debajo del lado izquierdo de cada cuadro está el desplazamiento de bits inicial del campo. Dentro de la caja hay una etiqueta que describe lo que representa el campo. Por ejemplo, Código de operación o Op representa el código de operación. Etiquetas que comienzan con R denotar una especificación de registro general y METRO representa máscaras. L los campos son longitudes. Algunas instrucciones tienen otras designaciones, como B para base y X para registros de índice, junto con D para compensación. El procesador suma los dos registros y el desplazamiento para obtener una dirección de memoria de operando.

La carta I significa operandos inmediatos, donde los datos son parte de la instrucción en sí. Este tipo de instrucciones tienden a ser más rápidas, porque la CPU no tiene que buscar el operando de la memoria.

El subíndice después de cada etiqueta le dice qué operando representa el campo. Por ejemplo, en un registro de carga (LR), los datos de instrucción se mueven desde el segundo operando (R2) al primero (R1).

Tenga en cuenta que los campos de longitud del código de objeto son uno menos que la longitud codificada en la fuente del ensamblador. Puede ver esto en la instrucción de movimiento de caracteres (MVC), donde la longitud de destino será ocho en el código fuente, pero siete en la instrucción de máquina generada. Este pequeño ajuste permite que las instrucciones amplíen su alcance. Es fácil de entender si todo esto suena un poco confuso. Los lenguajes de nivel superior suelen ser mucho más fáciles de leer y seguir que la codificación arcana de bajo nivel utilizada en ensamblador. El dominio requiere práctica, así que tómate el tiempo para familiarizarte con la arquitectura Z. Aunque la capacitación puede ser costosa, un buen libro de ensamblador proporcionará una base que se puede ampliar con la experiencia.

CONTENIDO RELACIONADO  Los asistentes de voz digitales buscan su lugar en la atención médica

Por último, tenga en cuenta que las instrucciones más antiguas y básicas contienen el código de operación en su primer byte. El código de operación de las instrucciones más recientes se puede dividir entre operandos. Puede identificar fácilmente los nuevos tipos de instrucciones, porque el código de operación que aparece en los manuales tendrá más de un byte.

Un ejemplo
Una técnica de depuración común implica ir a la instrucción a la que apunta la palabra de estado del programa (PSW) en el momento de un error y trabajar hacia atrás para averiguar cómo llegó allí el programa. A continuación se muestra un ejemplo de una secuencia de entrada de subrutina típica, como podría aparecer en un volcado después de una excepción de protección de almacenamiento (0C4) ABEND. Queremos desmontar este fragmento de código para ver qué salió mal.

Para fines de demostración, asumiremos que el PSW apuntó a la instrucción resaltada en amarillo.

Para fines de demostración, asumiremos que el PSW apuntó a la instrucción resaltada en amarillo.

La tabla en la tercera sección de PROPS del apéndice B (página B-41) enumera las instrucciones por código de operación. El primer byte de la instrucción es x’D2 ‘y corresponde a una instrucción MVC, como se muestra en la tercera columna. La última columna apunta a la descripción de la instrucción (páginas 7-232).

El diagrama de formato al comienzo del documento MVC nos permite desglosar la instrucción de la siguiente manera:

  • Código de operación de 1 byte (x’D2 ‘)
  • 1 byte de longitud (x’07 ‘)
  • Registro base de 1 byte para el primer operando (x’C ‘para el registro 12)
  • Desplazamiento de 3 bytes desde el primer registro base (x’0D4 ‘)
  • Segundo operando del registro base de 1 byte (x’1 ‘para el registro 1)
  • Desplazamiento de 3 bytes desde el segundo registro base (x’000 ‘)

Entonces, esta instrucción quería copiar 8 bytes de datos del desplazamiento +0 del registro uno a la memoria + D4 del registro 13. O, como se codificó originalmente:

MVC 212 (8,12), 0 (1)

Dado que el 0C4 ocurrió en esta instrucción de movimiento, podemos asumir que uno de los registros base, 12 o 1, no era válido. Para nuestros propósitos, podemos ver en los registros en el momento del error que el registro 1 tenía valores altos (x’FFFFFFFF ‘), que es una dirección de origen no válida. Ahora tenemos que averiguar cómo llegó a ser así.

CONTENIDO RELACIONADO  Dell vWorkspace descontinuado a medida que se avecina un acuerdo con EMC

A continuación, tenemos que volver a la instrucción anterior. Dado que la longitud mínima de la instrucción es media palabra, retrocedemos dos bytes desde la dirección de la instrucción anterior, lo que nos coloca en x’00 ‘(en rojo).

Cero no es un código de operación válido, lo que significa que tenemos que retirar dos bytes más (en verde) al x’A7 ‘. Desafortunadamente, la tabla de códigos de operación del apéndice B (página B-44) enumera 18 códigos de operación de tres nibble que comienzan con x’A7 ‘, lo que significa que esta es una instrucción de código de operación dividida. Sin embargo, parece que todos los códigos de operación A7 tienen un formato de tipo RI común. Pasando a la primera sección del resumen de la arquitectura, vemos que todos los OPCODE de la instrucción de formato RI se dividen entre el primer byte y el cuarto nibble. Para nuestra instrucción, podemos combinar el A7 del primer byte con el x’4 ‘en el cuarto nibble para crear un código de operación de A74, que representa una instrucción de condición relativa a la rama (BRC). Siguiendo el formato RI-c, se desglosa de la siguiente manera:

  • Código de operaciones de 1 byte (x’A7 ‘)
  • 1 máscara de código de condición de nibble (x’8), que se probará con el código de condición para ver si la CPU debe tomar la rama.
  • 1 código de operación nibble (x’4 ‘)
  • Campo inmediato de 2 bytes (x’0022 ‘). La CPU duplica este valor para encontrar la dirección de destino de la rama en relación con la ubicación de la instrucción actual.

Lamentablemente, no podemos saber para qué sirve esta rama hasta que comprendamos la comparación que la precedió. Hacer una copia de seguridad de dos bytes más nos lleva a un x’12 ‘(en morado). El confiable apéndice B equipara el x’12 ‘con una instrucción de registro de carga y prueba (LTR). La descripción de la instrucción (páginas 7-29) y el diagrama de formato desglosan la instrucción de la siguiente manera:

  • Código de operación de 1 byte (‘x12’)
  • Operando de primer registro de 1 nibble (x’F ‘)
  • Operando de registro de 1 nibble segundo (x’F ‘)

O, como se codificó originalmente:

LTR 15,15

Cuando el primer y segundo registros son iguales para esta instrucción, el programador probablemente pretendía probar el contenido del registro y bifurcar si son cero. Con esta suposición, podemos consultar la sección mnemotécnica extendida (página 43 en el resumen) e inferir que la instrucción de bifurcación original puede haber sido codificada como salto a cero (JZ), lo que trae la secuencia de tres instrucciones a (comentarios agregados para mayor claridad):

CONTENIDO RELACIONADO  El ECM híbrido basado en la nube es prometedor, pero ¿cumplirá? - Software ECM en crisis -

LTR 1,1 ¿El registro 1 es cero?

JZ * + 68 No, pasar a la rutina de recuperación

MVC 212 (8,12), 48 (1) Sí, copiar datos en R1

Dado que esta es la lógica de entrada de subrutinas, entendemos que, por convención, el registro 1 debe apuntar a un parámetro pasado por el programa de llamada. Sin embargo, en este caso, la persona que llama pasó una dirección de parámetro incorrecta (valores altos) que causó el 0C4.

Descodificación
A veces, distinguir los códigos de operación de los datos y los operandos dificulta el desmontaje. Sin embargo, existen varias reglas de sentido común para mantener el rumbo.

Primero, la mayoría de los programadores y compiladores agrupan literales y constantes en secciones fácilmente identificables de un programa. Por lo tanto, generalmente no vale la pena desensamblar un tramo de memoria que contenga mensajes o cadenas legibles por humanos.

Si bien el código y las aplicaciones a nivel de sistema utilizan principalmente las mismas instrucciones, existe un subconjunto de códigos de operación que se consideran «privilegiados» y reservados para el software ejecutivo. Si está depurando un programa COBOL ordinario, pero busca instrucciones privilegiadas o semi-privilegiadas en el Capítulo 10 de PROPS, puede que no esté.

Otro control de cordura implica observar el flujo de la lógica. Una vez que comprenda el funcionamiento básico de las instrucciones de la máquina, puede saber cómo podrían aplicarse a un algoritmo general. En otras palabras, es posible que no esté en el camino correcto si las instrucciones decodificadas parecen estar cargando registros al azar o ramificándose con una prueba anterior.

Si las cosas se complican demasiado, hay una variedad de desensambladores disponibles en forma de software gratuito en CBTTAPE.org y comercialmente. Sin embargo, recuerde que los desensambladores no son tan buenos como los humanos aplicando un poco de sentido común y, en ocasiones, pueden malinterpretar el código objeto y apuntar en la dirección incorrecta.

Sobre el experto: Robert Crawford ha sido programador de sistemas durante 29 años. Mientras se especializaba en soporte técnico de CICS, también ha trabajado con VSAM, DB2, IMS y una variedad de otros productos de mainframe. Ha programado en Assembler, Rexx, C, C ++, PL / 1 y COBOL. La última fase de su carrera lo encuentra como arquitecto de operaciones responsable de establecer la estrategia y dirección de mainframe para una gran compañía de seguros. Vive y trabaja con su familia en el sur de Texas.

¡Haz clic para puntuar esta entrada!
(Votos: Promedio: )

También te puede interesar...

¿Qué es el código corto común (CSC)?

Un código corto común (CSC) es un número de teléfono corto, que generalmente consta de cinco dígitos, que se utiliza para enviar mensajes SMS y MMS desde un teléfono celular. Los códigos cortos comunes también

Información y recursos de tecnología de ventas

Tecnología de ventas Noticias Tecnología de ventas Empezar Ponte al día con nuestro contenido introductorio Evaluar Vendedores y productos de tecnología de ventas Sopese los pros y los contras de las tecnologías, los productos y

¿Qué es Big Tech?

Big Tech es un término que se refiere a las empresas de tecnología más grandes y dominantes en sus respectivos sectores. Sus productos y servicios se utilizan a nivel mundial y tanto empresas como individuos

¿Qué es un esquema?

¿Qué es un esquema? En la programación de computadoras, un esquema (pronunciado SKEE-mah) es la organización o estructura de una base de datos, mientras que en la inteligencia artificial (IA) un esquema es una expresión

¿Dónde tiene sentido?

Si bien aún buscan una definición, las aplicaciones de «big data» se están dividiendo en al menos dos campos principales definibles: big data en reposo y big data en movimiento. El alto volumen, la gran

SAP expande las ofertas de datos geoespaciales con Esri

Las tres claves para el éxito de las propiedades inmobiliarias son la ubicación, la ubicación y la ubicación. SAP ahora ofrece funciones y asociaciones que, según dice, facilitarán la incorporación de la ubicación a las

Cómo cambiar la configuración predeterminada en SAP SRM

Estoy buscando establecer Confirmación y Factura como opciones predeterminadas en un carrito de compras de orden limitada. Actualmente, las acciones de seguimiento solo han configurado la Factura como predeterminada. es posible? ¿Cómo puedo cambiar el

Administrador de bases de datos y SQL Studio

Este consejo explica cómo dar los primeros pasos con las herramientas de MaxDB que se envían con la descarga de la versión de prueba ABAP. En la descarga de la Versión de Prueba ABAP existen

Cómo mapear múltiples roles y perfiles de SAP

Hemos descubierto que algunos de nuestros roles de SAP están asignados con varios nombres de perfil. ¿Es posible tener múltiples … perfiles a un solo rol? Nota: Estos roles son roles derivados, no roles compuestos

Autoorganizar equipos Scrum con el marco LeSS

Large Scale Scrum (LeSS) es un marco liviano para extender Scrum a más de un equipo. LeSS básico, para dos a ocho equipos, es como una extensión del método Scrum of Scrums para escalar Agile,

¿Qué es AWS Lambda (Amazon Web Services Lambda)?

AWS Lambda es un servicio en la nube de computación impulsado por eventos de Amazon Web Services que permite a los desarrolladores programar funciones mediante pago por uso sin tener que aprovisionar almacenamiento o recursos

La lucha infinita de probar IoT

El año pasado, Nintendo lanzó una nueva consola. A mis hijos y a mí nos gustan los juegos, así que tuvimos que conseguir esta nueva consola: la Switch. Si no estoy escribiendo blogs, artículos, libros

No encontrado | Dell Technologies EE. UU.

No se encuentra la página que busca. Probemos una ruta diferente. Inicie una nueva búsqueda en DellTechnologies.com o explore nuestras ofertas, soporte y más a continuación. ¡Haz clic para puntuar esta entrada! (Votos: Promedio: )CONTENIDO

¿Cómo uso SR-IOV para máquinas virtuales Hyper-V?

Muchos administradores virtuales aún no están familiarizados con la virtualización de E/S de raíz única que Microsoft introdujo en Windows Server 2012 Hyper-V. La especificación SR-IOV fue diseñada por PCI-SIG para permitir que un dispositivo

Cómo probar el módulo de reinicio pendiente de PowerShell

Es probable que esté acostumbrado a reiniciar una computadora con Windows, y el módulo de reinicio pendiente de PowerShell puede facilitar ese proceso. Windows requiere un reinicio para finalizar correctamente las operaciones, como la actualización

AWS CloudFormation y OpsWorks: ¿mejor juntos?

Si está considerando CloudFormation u OpsWorks para su entorno de AWS, es posible que no esté solo. Las herramientas funcionan … mano a mano, pero ofrecen beneficios muy diferentes. Al obtener una mejor comprensión de

¿Qué es una clave privada?

¿Qué es una clave privada? Una clave privada, también conocida como llave secreta, es una variable en criptografía que se utiliza con un algoritmo para cifrar y descifrar datos. Las claves secretas solo deben compartirse

Windows Sleep: excelente cuando funciona

Cualquiera que haya estado siguiendo los estados de suspensión y la administración de energía para el nuevo Microsoft Surface Book y Surface Pro 4 sabe que los problemas persistentes y problemáticos han plagado esas plataformas

De mono a micro: allanando el camino hacia IoT

¿Recuerdas los días del monolito? Está bien, entonces no lo somos ese Muy por delante, pero al ritmo que la mayoría de las empresas están implementando tecnologías de próxima generación, pasar de la arquitectura monolítica

Costos de integración futura y persistencia políglota

Persistencia políglota debe ser el término más feo que se nos haya ocurrido en la industria de TI. Significa que se utilizan diferentes tecnologías de persistencia (tecnologías de almacenamiento de datos de lectura) para almacenar

¿Qué es la verificación de dependencia?

La comprobación de dependencias es una función que se realiza para garantizar que estén presentes todos los requisitos previos para una imagen en tiempo de ejecución determinada. El software de verificación de dependencias permite verificar

¿Cómo se ejecuta DevOps empresarial?

DevOps ha escapado del reino enrarecido de los unicornios y las nuevas empresas, a medida que las empresas de caballos de batalla adoptan la metodología de soporte y entrega de aplicaciones. Cada experiencia es única

Salesforce actualiza Sales Cloud para el trabajo remoto

Los usuarios de Salesforce Sales Cloud cuyos equipos de ventas todavía están trabajando de forma remota debido a las pautas de la pandemia están obteniendo algunas funciones nuevas para facilitar la incorporación de nuevos representantes,

GNOME (entorno de modelo de objetos de red GNU)

¿Qué es GNOME? GNOME (entorno de modelo de objetos de red GNU, pronunciado gah-NOHM) es una interfaz gráfica de usuario (GUI) y un conjunto de aplicaciones de escritorio para usuarios del sistema operativo Linux. Su

Deja un comentario