Colección de citas famosas - Slogan de motivación - Estructura general del fragmento (cabeza)

Estructura general del fragmento (cabeza)

El fragmento binario se divide principalmente en dos partes:

Puede utilizar el comando xxd para observar el archivo luac

1. Encabezado

Encabezado *** ocupa 30 subsecciones (varía según la plataforma)

Contiene:

a. Firma

Muchos formatos binarios comenzarán con una magia fija. número (Número mágico) Inicio

(archivo de clase Java, el número mágico es de cuatro bytes 0xCAFEBABC)

El número mágico (también llamado firma) del fragmento binario de Lua también consta de cuatro palabras Sección Los códigos son los códigos ASCII de ESC, L, u y a respectivamente.

La representación hexadecimal es 0x1B4C7561 y la cadena es \x1bLua

Su función principal es identificar rápidamente el archivo. Función de formato

Cuando la máquina virtual Lua intenta cargar un archivo fragmentado y descubre que no comienza con esto, se negará a cargar el archivo

Número de versión

. p>

Un byte después de la firma registra el número de versión de Lua correspondiente al archivo binario

Consta de tres partes:

Número de formato

Después del número de versión, una subsección de registra el número de formato del fragmento binario

Cuando Lua carga un fragmento binario, también verificará el número de formato

Si no coincide con el formato número de la máquina virtual, se negará a cargar el archivo

El número de formato utilizado oficialmente por Lua es 0

d.LUAC_DATA

Los seis. los bytes después del número de formato se denominan LUAC_DATA en la implementación oficial de Lua

Los dos primeros caracteres son 0x1993, que es el año en que se lanzó Lua 1.0

Las últimas cuatro subsecciones son: carro El carácter de retorno (0x0D), el carácter de avance de línea (0x0A), el carácter de reemplazo (0x1A) y otro carácter de nueva línea

también se utilizan para la verificación si la máquina virtual encuentra que estos seis bytes son diferentes al cargar el binario. trozo, pensará que el archivo está dañado y se negará a cargar

e. ancho de instrucción de la máquina virtual Integer y Lua

Los siguientes números registran los cinco tipos de datos de cint, size_t. , Instrucción de máquina virtual Lua, número entero Lua y número de punto flotante Lua, que están prohibidos por Microsoft. El número de bytes ocupados en el fragmento.

También se comprobará el número de bytes ocupados por estos cinco tipos de datos. Si no coincide con el valor esperado, se rechazará la carga

f.LUAC_INT

.

Analizado La subsección n almacena el valor entero de Lua 0x5678

para verificar el modo big-endian del fragmento binario, Lua usará la máquina virtual para cargar el fragmento binario y usará estos datos para. compruebe si el modo big-endian coincide con el nativo. Si no coincide, el registro será rechazado

g.LUAC_NUM

Las últimas n subsecciones del encabezado almacenan Lua. número de punto flotante 370.5

También se usa para detectar binarios. El formato de punto flotante usado por el fragmento, se niega a cargar si no coincide

(las plataformas y lenguajes principales generalmente usan el formato de punto flotante IEEE 754)