Sunday 18 December 2016

0x2c Binary Options

BasE91 introducción de codificación basE91 es un método avanzado para codificar datos binarios como caracteres ASCII. Es similar a UUencode o base64, pero es más eficiente. La sobrecarga producida por basE91 depende de los datos de entrada. Se asciende como máximo a 23 (frente a 33 para base64) y puede variar hasta 14, lo que ocurre típicamente en bloques de 0 bytes. Esto hace que basE91 sea muy útil para transferir archivos más grandes a través de conexiones binarias no seguras como correo electrónico o líneas terminales. Alfabeto Como su nombre indica, basE91 necesita 91 caracteres para representar los datos binarios codificados en ASCII. De los 94 caracteres ASCII imprimibles (0x21-0x7E), se han omitido los tres siguientes para construir el alfabeto basE91: La tabla de traducción se compone de los caracteres restantes como se muestra a continuación. Este documento presenta cuobjdump. Nvdisasm Y nvprune. Tres herramientas binarias CUDA para Linux (x86 y ARM), Windows, Mac OS y Android. Un archivo binario CUDA (también conocido como cubin) es un archivo con formato ELF que consiste en secciones de código ejecutable de CUDA, así como otras secciones que contienen símbolos, relocators, información de depuración, etc. De forma predeterminada, el controlador de compilador CUDA nvcc incrusta archivos cubin En el archivo ejecutable del host. Pero también se pueden generar por separado usando la opción - cubin de nvcc. Los archivos de cubin se cargan en tiempo de ejecución por la API del controlador CUDA. Nota: Para obtener más detalles sobre los archivos cubin o la trayectoria de compilación CUDA, consulte NVIDIA CUDA Compiler Driver NVCC. CUDA proporciona dos utilidades binarias para examinar y desmontar archivos de cubos y ejecutables de host: cuobjdump y nvdisasm. Básicamente, cuobjdump acepta tanto archivos cubin como binarios de host, mientras que nvdisasm solo acepta archivos de cubo, pero nvdisasm proporciona opciones de salida más ricas. Comparación de cuobjdump y nvdisasm cuobjdump extrae información de los archivos binarios de CUDA (tanto autónomos como incrustados en los binarios de host) y los presenta en formato legible por humanos. La salida de cuobjdump incluye código de ensamblaje CUDA para cada núcleo, encabezados de sección CUDA ELF, tablas de cadenas, relocadores y otras secciones específicas de CUDA. También extrae texto ptx incrustado de binarios de host. Para obtener una lista del conjunto de instrucciones de ensamblado CUDA de cada arquitectura de GPU, consulte Referencia de conjuntos de instrucciones. Cuobjdump acepta un único archivo de entrada cada vez que se ejecuta. El uso básico es el siguiente: Para desmontar un cubo o cubos independientes incrustados en un ejecutable de host y mostrar el ensamblado CUDA de los kernels, utilice el siguiente comando: Para volcar secciones de cuda elf en formato legible desde un archivo cubin, use el siguiente comando : Para extraer el texto de ptx de un binario del anfitrión, utilice el comando siguiente: Heres una salida de la muestra de cuobjdump. Como se muestra en la salida, el binario host a. out contiene código de cubin y ptx para sm20. Para enumerar los archivos del cubo en el uso binario del host - lelf opción: Para extraer todos los cubins como archivos del uso del binario del anfitrión - xelf todo opción: Extraer el cubin nombrado addnew. sm30.cubin. Para extraer sólo los cubos que contienen antiguos en sus nombres: Puede pasar cualquier subcadena a las opciones - xelf y - xptx. Sólo los archivos que tengan la subcadena en el nombre se extraerán del binario de entrada. Para volcar información de uso de recursos comunes y por función: Tenga en cuenta que el valor para REG, TEXTURE, SURFACE y SAMPLER denota el recuento y para otros recursos denota no. De byte (s) utilizado (s). La Tabla 2 contiene las opciones de línea de comandos compatibles de cuobjdump. Junto con una descripción de lo que hace cada opción. Cada opción tiene un nombre largo y un nombre abreviado, que se puede utilizar indistintamente. Tabla 2. Opciones de la línea de comandos cuobjdump --extract-elf ltpartial file namegt. Extraiga el nombre de archivo ELF que contiene el nombre de archivo ltpartial y guárdelo como archivo (s). Utilice todo para extraer todos los archivos. Para obtener la lista de archivos ELF utilice la opción - lelf. Funciona con host ejecutable / object / library y fatbin externo. Todas las opciones de volcado y lista se ignoran con esta opción. --extract-ptx nombre de archivo ltpartial. Extraiga el nombre de archivo PTX que contenga el nombre de archivo ltpartial y guárdelo como archivo (s). Utilice todo para extraer todos los archivos. Para obtener la lista de archivos PTX, utilice la opción - lptx. Funciona con host ejecutable / object / library y fatbin externo. Todas las opciones de volcado y lista se ignoran con esta opción. --función de función ltf. Especifique los nombres de las funciones del dispositivo cuyas estructuras binarias de grasa deben ser objeto de dumping. --función de funciones índice de funcionamiento. Especifique el índice de tabla de símbolos de la función cuyas estructuras binarias de grasa deben ser objeto de dumping. --gpu-architecture ltgpu architecture namegt Especifica la arquitectura de la GPU para la que se debe descargar la información. Valores permitidos para esta opción: sm20, sm21, sm30, sm32, sm35, sm37, sm50, sm52, sm53, sm60, sm61. Imprima esta información de ayuda en esta herramienta. Enumere todos los archivos ELF disponibles en el fatbin. Funciona con host ejecutable / object / library y fatbin externo. Todas las demás opciones se ignoran con este indicador. Esto se puede utilizar para seleccionar ELF particular con la opción - xelf más tarde. Enumere todos los archivos PTX disponibles en el fatbin. Funciona con host ejecutable / object / library y fatbin externo. Todas las demás opciones se ignoran con este indicador. Esto se puede utilizar para seleccionar PTX particular con la opción - xptx más adelante. Incluir opciones de línea de comandos del archivo especificado. Nvdisasm extrae la información de archivos de cubo independientes y los presenta en formato legible. La salida de nvdisasm incluye código de ensamblaje CUDA para cada kernel, listado de secciones de datos ELF y otras secciones específicas de CUDA. El estilo de salida y las opciones se controlan a través de las opciones de línea de comandos de nvdisasm. Nvdisasm también controla el análisis de flujo para anotar los objetivos de salto / rama y hace que la salida sea más fácil de leer. Nota: nvdisasm requiere información de reubicación completa para hacer análisis de flujo de control. Si esta información falta en el binario CUDA, utilice la opción nvdisasm - ndf para desactivar el análisis de flujo de control o utilice la opción ptxas y nvlink - preserve-relocs para volver a generar el archivo cubin. Para obtener una lista del conjunto de instrucciones de ensamblado CUDA de cada arquitectura de GPU, consulte Referencia de conjuntos de instrucciones. Nvdisasm acepta un solo archivo de entrada cada vez que se ejecuta. El uso básico es el siguiente: Para obtener el gráfico de flujo de control de un kernel, utilice lo siguiente: Heres una muestra de salida de nvdisasm. Nvdisasm es capaz de generar el flujo de control del ensamblado CUDA en el formato del lenguaje de descripción de gráficos DOT. La salida del flujo de control de nvdisasm se puede importar directamente a una herramienta de visualización de gráficos DOT como Graphviz. Nota: Esta función sólo se admite en cubos generados para Compute Capability 3.0 y versiones posteriores. Heres cómo se puede generar una imagen PNG (cfg. png) del flujo de control del cubo anterior (a. cubin) con nvdisasm y Graphviz: Heres el gráfico generado: Figura 1. Gráfico de flujo de control nvdisasm es capaz de mostrar el registro ( CC, general y predicado). Para cada línea de ensamblado CUDA, nvdisasm muestra si se ha asignado un registro de dispositivo determinado, se ha accedido, se ha activado o se ha reasignado. También muestra el número total de registros utilizados. Esto es útil si el usuario está interesado en el rango de vida de cualquier registro en particular, o registrar el uso en general. Nota: Esta función sólo se admite en cubos generados para Compute Capability 3.0 y versiones posteriores. Aquí se muestra una salida de muestra (se omite las columnas de la izquierda): La Tabla 3 contiene las opciones de línea de comandos soportadas de nvdisasm. Junto con una descripción de lo que hace cada opción. Cada opción tiene un nombre largo y un nombre abreviado, que se puede utilizar indistintamente. Tabla 3. Opciones de línea de comandos nvdisasm nvprune acepta un único archivo de entrada cada vez que se ejecuta, emitiendo un nuevo archivo de salida. El uso básico es el siguiente: El archivo de entrada debe ser un objeto de host reubicable o una biblioteca estática (no un ejecutable de host), y el archivo de salida tendrá el mismo formato. Se debe utilizar la opción --arch o --generate-code para especificar el o los objetivos a mantener. El resto del código de dispositivo se descarta del archivo. Los objetivos pueden ser un arco smNN (cubin) o un arco computeNN (ptx). Por ejemplo, a continuación, podremos libcublasstatic. a para contener sólo cubo sm35 en lugar de todos los objetivos que normalmente existen: Tenga en cuenta que esto significa que libcublasstatic35.a no se ejecutará en ninguna otra arquitectura, por lo que sólo debe utilizarse cuando se está construyendo para Una sola arquitectura. La Tabla 7 contiene las opciones de línea de comandos compatibles de nvprune. Junto con una descripción de lo que hace cada opción. Cada opción tiene un nombre largo y un nombre abreviado, que se puede utilizar indistintamente. Tabla 7. Opciones de línea de comandos de nvprune Aviso TODAS LAS ESPECIFICACIONES DE DISEÑO DE NVIDIA, PÁGINAS DE REFERENCIA, ARCHIVOS, DIBUJOS, DIAGNÓSTICOS, LISTAS Y OTROS DOCUMENTOS (JUNTOS Y SEPARADAMENTE, MATERIALES) ESTÁN PRESTADOS TAL COMO ES. NVIDIA NO OFRECE NINGUNA GARANTÍA, EXPRESA, IMPLÍCITA, LEGAL O DE OTRA MANERA CON RESPECTO A LOS MATERIALES Y EXPRESAMENTE RENUNCIA A TODAS LAS GARANTÍAS IMPLÍCITAS DE NO INFRACCIÓN, COMERCIABILIDAD Y ADECUACIÓN PARA UN PROPÓSITO PARTICULAR. La información proporcionada se cree que es precisa y fiable. Sin embargo, NVIDIA Corporation no asume ninguna responsabilidad por las consecuencias del uso de dicha información o por cualquier infracción de patentes u otros derechos de terceros que pudieran resultar de su uso. Ninguna licencia se concede por implicación de lo contrario bajo cualquier derecho de patente de NVIDIA Corporation. Las especificaciones mencionadas en esta publicación están sujetas a cambios sin previo aviso. Esta publicación reemplaza y reemplaza toda otra información suministrada anteriormente. Los productos de NVIDIA Corporation no están autorizados como componentes críticos en dispositivos o sistemas de soporte vital sin la aprobación por escrito de NVIDIA Corporation. Marcas comerciales NVIDIA y el logotipo de NVIDIA son marcas comerciales o marcas registradas de NVIDIA Corporation en los Estados Unidos y otros países. Otros nombres de empresas y productos pueden ser marcas registradas de las respectivas compañías con las que están asociados. Autor: J. Hipps Primera construcción: 14 Jan 2010 Licencia: LGPL Versión 3 fplreader es un rápido y ligero foobar2000 FPL playlist analizador escrito en C Sin otras dependencias que la biblioteca C estándar. Se puede compilar y ejecutar en casi cualquier sistema con un compilador de GCC de trabajo o utilizando MSVC, como Linux, FreeBSD, Windows y Mac OS X. Aunque el programa es impulsado por la línea de comandos, es muy fácil de usar. Los ejemplos de uso y la sintaxis se describen a continuación. Mi razón principal para escribir este programa en 2010 fue para que yo pudiera crear una interfaz web para navegar por mi música. Sin embargo, realmente me acostumbré a la forma en que foobar2000 analizó los metadatos del archivo y disfrutó de la velocidad con que lo hacía. Además, volver a analizar decenas de miles de archivos no es exactamente rápido, no importa cómo optimizado se convierte su programa. Espero que encuentre este software útil, o sea capaz de incorporar el código en su propio proyecto, o por lo menos el formato FPL se convierte en un poco más claro para su uso en su propia implementación. Sólo le pido que proporcione el crédito apropiado cuando sea debido. Después de darse cuenta de que foobar2000s playlist formato fue inédito y nadie en el momento había logrado ingeniería inversa de su diseño, me dispuse a hacerlo por mi cuenta. Después de horas de hackear con un editor hexadecimal y modificar y volver a guardar las listas de reproducción para ver cómo cambió el archivo resultante, logré recoger la estructura general y la mayoría de los campos que son almacenados por el reproductor. La estructura general utiliza un índice de pista en la parte superior del archivo, seguido de una tabla de cadenas que contiene entradas detalladas para los metadatos y atributos de archivo. Track data chunk 4 bytes - sin signo int unk1 -. 4 bytes - unsigned int fileofz - filename string offset 4 bytes - sin signo int subsong - subsong valor del índice 4 bytes - unsigned int fsize - tamaño de archivo 4 bytes - unsigned int unk2 -. 4 bytes - unsigned int unk3 -. 4 bytes - unsigned int unk4 -. 8 bytes - unsigned doble int durationdbl - duración de la pista, en segundos (la estructura del programa utiliza char durationdbl8) 4 bytes - flotador rpgalbum - ganancia de reproducción, álbum 4 bytes - flotador rpgtrack - ganancia de reproducción, pista 4 bytes - flotador rpkalbum - Pico 4 bytes - float rpktrack - ganancia de reproducción, pico de pista 4 bytes - unsigned int keysdex - número de teclas / punteros que siguen 4 bytes - unsigned int keyprimary - número de primarias info keys 4 bytes - unsigned int keysecond - número de secundaria info key Combos 4 bytes - unsigned int keysecoffset - índice de inicio de clave secundaria Pista de datos de atributos Clave - gt Par de valores, NULL terminado (ver lista de fuentes para más detalles) Se puede obtener más información del código fuente para aprender cómo se analiza el archivo. La longitud del registro no es fija, ya que foobar2000 puede almacenar un número arbitrario de atributos de metadatos para cada archivo (aunque arbitrariamente se utiliza un poco losely, ya que probablemente es limitado en la práctica, y fplreader está limitado a 512 pares clave / valor por pista)


No comments:

Post a Comment