The latest Help release available in English.
© 2019 R-Tools Technology Inc.
All rights reserved.
A continuación puede ver un ejemplo de patrón con comentarios de análisis de un archivo AVI.
<?xml version="1.0" encoding="utf-8"?>
<!-- Sección de patrón. El nombre del patrón es AVI File (archivo AVI) . -->
<template name="AVI File">
<!-- Sección de firma de plantilla. Alineación es 1 . -->
<signature align="1">
<!-- Firma de 4 bytes en desplazamiento 0x00 . -->
<field offset="0x00">52 49 46 46</field> <!-- ANSI: RIFF -->
<!-- Firma de 4 bytes en desplazamiento 0 x08. -->
<field offset="0x08">41 56 49 20</field> <!-- ANSI: LIST -->
</signature>
<!-- Sección de datos. Su nombre es AVI File . Ésta es una sección de datos principal. En el árbol de análisis no se muestra como una sección (su nombre está omitido) . -->
<section name="AVI File">
<!-- Los primeros 4 bytes se leen y se muestran como una cadena ANSI . -->
<field type="char" size="4" name="Firma: RIFF" var="signature"/>
<!-- La posición actual se ha desplazado al comienzo del archivo . -->
<goto offset="-4"/>
<!-- Los primeros 4 bytes del archivo se leen y se muestran como un entero sin signo. La variable interna signature (firma) obtiene el valor del campo . -->
<field type="uint32" base="hex" name="Firma RIFF como entero sin signo en formato hexadecimal" var="signature"/>
<!-- Prueba de condición ( signature == RIFF ) -->
<if test="signature == 0x46464952"> <!-- ANSI: RIFF -->
<!-- Los próximos 4 bytes se leen y se muestran como un entero sin signo. La variable interna dataSize (tamaño de datos) obtiene el valor del campo. -->
<field type="uint32" name="Tamaño de los datos en el archivo" var="dataSize"/>
<!-- Se ha creado una nueva variable interna endOfFile (final de archivo) y el campo expr está evaluando su valor.-->
<setvar var="endOfFile" expr="offset + dataSize - 8"/>
<!-- Los próximos 4 bytes se leen y se muestran como una cadena ANSI. -->
<field type="char" size="4" name="Tipo de archivo"/>
<!-- Se ha creado una nueva sección llamada DATOS -->
<section name="DATOS">
<!-- Se ha creado una nueva variable interna chunksOffset (desplazamiento de fragmentos) y el campo expr está evaluando su valor. Esta variable obtiene el valor absoluto del desplazamiento de plantilla. -->
<setvar var="chunksOffset" expr="start_position"/>
<!-- Se ha creado un bucle. Su condición está establecida en el campo de prueba (mientras la variable endOfFile sea mayor que la posición actual.) -->
<repeat test="endOfFile > offset">
<!-- 4 bytes se leen y se muestran como una cadena ANSI. -->
<field type="char" size="4" name="Firma"/>
<!-- La posición actual se ha desplazado 4 bytes hacia atrás . -->
<goto offset="-4"/>
<!-- Los mismos 4 bytes se leen y se muestran como un entero sin signo. La variable interna signature obtiene este valor. -->
<field type="uint32" name="Firma como un entero sin signo" var="signature"/>
<!-- Prueba de condición ( signature == LIST ) -->
<if test="signature == 1414744396"> <!-- ANSI: LIST -->
<!-- La sección está mostrada. Su nombre es LIST -->
<section name="LIST">
<!-- La posición actual se ha desplazado 4 bytes hacia atrás . -->
<goto offset="-4"/>
<!-- Los 4 bytes se leen y se muestran como un entero hexadecimal sin signo. Este campo tiene los atributos offset y assigned-template . Si el usuario hace doble clic en este campo, se invocará el patrón AVI File LIST y la posición del patrón actual se desplazará a la dirección especificada en as-offset .-->
<field type="uint32" base="hex" name="Firma LIST como entero sin signo en formato hexadecimal" as-offset="start_position + offset - 4" assigned-template="AVI File LIST"/>
<!-- Los próximos 4 bytes se leen y se muestran como un entero sin signo. La variable listSize (tamaño de lista) obtiene su valor. -->
<field type="uint32" name="Tamaño de los datos en la lista" var="listSize"/>
<!-- Los 4 bytes se leen y se muestran como una cadena ANSI. -->
<field type="char" size="4" name="Tipo de lista"/>
<!-- La posición actual se ha desplazado 4 bytes hacia atrás . -->
<goto offset="-4"/>
<!-- Los mismos 4 bytes se leen y se muestran como un entero hexadecimal sin signo. La variable listType (tipo de lista) obtiene su valor.-->
<field type="uint32" base="hex" name="Tipo de lista como entero sin signo en formato hexadecimal" var="listType"/>
<!-- Prueba de condición ( type == movi ) -->
<if test="listType == 0x69766f6d"> <!-- ANSI: movi -->
<!-- La variable chunksOffset (desplazamiento de fragmentos) obtiene su valor evaluado en el atributo expr . -->
<setvar var="chunksOffset" expr="start_position + offset - 4"/>
</if>
<!-- La posición actual se ha desplazado a la dirección evaluada en el atributo de la dirección. -->
<goto address="offset + listSize - 4"/>
</section>
</if>
<!-- Prueba de condición ( signature == JUNK ) -->
<if test="signature == 1263424842"> <!-- ANSI: JUNK -->
<!-- La sección de muestra con el nombre JUNK (elementos no deseados) . -->
<section name="JUNK">
<!-- Los próximos 4 bytes se leen y se muestran como un entero sin signo. La variable interna junkSize (tamaño de elementos no deseados) obtiene su valor. -->
<field type="uint32" name="Tamaño de los datos de los elementos no deseados" var="junkSize"/>
<!-- La posición actual se ha desplazado hacia atrás la cantidad de bytes especificada en junkSize . -->
<goto offset="junkSize"/>
</section>
</if>
<!-- Prueba de condición ( signature == idx1 ) -->
<if test="signature == 829973609"> <!-- ANSI: idx1 -->
<!-- Esta sección se muestra con el nombre idx1 . -->
<section name="idx1">
<!-- Los próximos 4 bytes se leen y se muestran como un entero sin signo. La variable interna idxSize (tamaño de idx) obtiene su valor. -->
<field type="uint32" name="Tamaño de los datos de idx1" var="idxSize"/>
<!-- La sección se muestra con el nombre First AVIINDEXENTRY (primera entrada de índice de AVI) . -->
<section name="First AVIINDEXENTRY">
<!-- Los 4 bytes se leen y se muestran como una cadena ANSI. -->
<field type="char" size="4" name="Id de fragmento"/>
<!-- Los próximos 4 bytes se leen y se muestran como un entero hexadecimal sin signo. -->
<field type="uint32" base="hex" name="Marcas"/>
<!-- Los próximos 4 bytes se leen y se muestran como un entero hexadecimal sin signo. El atributo de desplazamiento se evalúa para este campo como suma de la variable chunksOffset y el valor de este campo. -->
<field type="uint32" base="hex" name="Desplazamiento de fragmento" as-offset="chunksOffset + this"/>
<!-- Los próximos 4 bytes se leen y se muestran como un entero sin signo. -->
<field type="uint32" name="Tamaño de fragmento"/>
</section>
<!-- La posición actual se ha desplazado hacia delante la cantidad de bytes especificada en idxSize . -->
<goto offset="idxSize"/>
</section>
</if>
<!-- Prueba de condición. && es un AND lógico ( && ) -->
<if test="signature != 1414744396 && signature != 1263424842 && signature != 829973609">
<!-- Se ha mostrado un sección vacía. Su nombre es Se ha encontrado una firma desconocida -->
<section name="Se ha encontrado una firma desconocida">
</section>
<!-- La posición actual se ha desplazado hacia la dirección establecida en la variable endOfFile . -->
<goto address="endOfFile"/>
</if>
</repeat>
</section>
</if>
</section>
</template>