tipo formato extension como cambiar archivo .net format clr .net-assembly ngen

.net - formato - como cambiar la extension de un video



¿Cuál es el formato de los archivos `*.ni.dll.aux`? (1)

¿Cuál es el formato (diseño de datos) de los archivos *.ni.dll.aux que se encuentran en C:/Windows/assembly/NativeImages_v4.0.30319_64 ? Entiendo que estos son archivos auxiliares generados por ngen.exe . ¿Qué datos contienen?


el análisis muestra que es un formato bastante simple (como señaló Hans Passant). tiene una palabra de tipo seguida de una palabra de longitud en 3 niveles: a nivel de archivo, nivel de registro y nivel de referencia (estos son términos arbitrarios que estoy usando para mayor claridad).

Este es un resumen:

jcomeau@aspire:~//17681514$ ./job.py System.Net.ni.dll.aux 00000005 (00000204): 0b000000bc0000000d000000...00000000000000000000cccc 0000000b (000000bc): 0d0000005000000053797374...00000000000000000000cccc 0000000d: (00000050) ''System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a/x00/xcc/xcc'' 00000007: (00000004) ''/t/x11/x00/x00'' 00000002: (00000008) ''/x00i,/x03c]/xcd/x01'' 00000008: (00000014) ''/xf3/xd8#/x08/xf7/x08/x9a$1/x11/xb8/x18Rv/xf4@/xa1y/xb2.'' 0000000a: (00000024) ''/x011.0.23-106002268/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/xcc/xcc'' 00000004 (00000098): 010000004c0000006d73636f...00000000000000000000cccc 00000001: (0000004c) ''mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089/x00'' 00000003: (00000010) ''/x9d/xa5/xbb3/xcd/x1c4/xb7/x85/x1c/x08/x8f/x0c/xf7I/xcc'' 0000000a: (00000024) ''/x011.0.23-106002119/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/xcc/xcc'' 00000004 (00000098): 010000004c00000053797374...00000000000000000000cccc 00000001: (0000004c) ''System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089/x00/xcc/xcc'' 00000003: (00000010) ''/xe30[/xdb/xd0>/xf9/x19/x05/x1a/xa7/xf2x:/xc3*'' 0000000a: (00000024) ''/x011.0.23-106003331/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/xcc/xcc''

Aquí está el script (desarrollado de forma incremental) que vuelca lo anterior:

jcomeau@aspire:~//17681514$ cat job.py #!/usr/bin/python import sys, os, struct def dump(infile): data = read(infile) filelength = len(data) filetype, length, data = next(data) assert filelength == length + 8 print ''%08x (%08x): %s'' % (filetype, length, snippet(data)) lengthcheck = 8 while data: recordtype, recordlength, data = next(data) lengthcheck += 8 + recordlength #debug(''remaining data: %s'' % snippet(data)) record, data = data[:recordlength], data[recordlength:] print '' %08x (%08x): %s'' % (recordtype, recordlength, snippet(record)) recordcheck = 0 # not 8 because record header was already not counted while record: subrecordtype, subrecordlength, record = next(record) recordcheck += 8 + subrecordlength datum, record = record[:subrecordlength], record[subrecordlength:] print '' %08x: (%08x) %s'' % (subrecordtype, subrecordlength, repr(datum)) assert recordcheck == recordlength assert lengthcheck == filelength def next(data): ''each chunk is a type word followed by a length word'' if not data: typeword, length = 0, 0 elif len(data) > 16: typeword = struct.unpack(''<I'', data[:4])[0] length = struct.unpack(''<I'', data[4:8])[0] else: raise Exception(''Invalid data length %d'' % len(data)) return typeword, length, data[8:] def read(filename): input = open(filename, ''rb'') data = input.read() input.close() return data def snippet(data): snippet = data[:12].encode(''hex'') if len(data) > 12: snippet += ''...'' if len(data) > 24: snippet += data[-12:].encode(''hex'') return snippet def debug(message): if __debug__: if message: print >>sys.stderr, message return True if __name__ == ''__main__'': for infile in sys.argv[1:]: dump(infile)

cada registro tiene un tipo de subregistro 0xa que parece ser un número de versión de orden. el tipo de subrecordio 0x3 puede ser un GUID, solo a juzgar por su longitud. Los tipos 0x1 y 0xd son descriptivos. No tengo idea de qué tipos de subrecordio 0x7 y 0x2 pueden ser. quizás 0x7 es un desplazamiento de 32 bits en la .dll coincidente, pero el número de 64 bits en el tipo 0x2 no me sugiere nada en particular. tipo 0x8, 20 bytes de longitud, podría ser algún tipo de hash. Quizás otros puedan llenar los espacios en blanco.

Los valores de cadena, como puede ver, terminan en 0x0 más 0xcccc. el tipo de registro 0xa es en su mayoría datos de cadena, pero precedido por un byte de 0x1 y una longitud fija de 0x24, por lo que se rellena con 0x0s adicionales. Otros tipos de registro, pero no todos, también terminan en 0xcccc.

los archivos se obtuvieron mediante una búsqueda en Google de "index.of dll.aux", y se encuentran aquí: http://www.badelement.co.uk/Movies/Storage/Win-7-Pro_64/Windows/assembly/NativeImages_v4.0.30319_64/System.Net/d79a634a4d873717e2dab52d827ba985/