2013-07-16 3 views
22

C:\Windows\assembly\NativeImages_v4.0.30319_64에있는 *.ni.dll.aux 개의 파일 형식 (데이터 레이아웃)은 무엇입니까? 이 파일들은 ngen.exe에 의해 생성 된 보조 파일이라는 것을 알고 있습니다. 어떤 데이터에 포함되어 있습니까?`* .ni.dll.aux` 파일의 형식은 무엇입니까?

+4

, 그 안에 많은 데이터의 침에 대한 모든 종속 어셈블리 단지 목록이 아니다 마다. 이것은 어디에서도 문서화되지 않았으며 프로필 유도 최적화와 같은 .NET 4.5 최적화와 관련이있을 수 있습니다. 어떤 문제를 해결하려고합니까? –

+0

오프 주제가 아닌가요? – dhein

답변

2

분석 결과 상당히 간단한 형식으로 나타났습니다 (Hans Passant가 지적했듯이). 파일 수준, 레코드 수준 및 데이텀 수준 (이는 명확성을 위해 사용하는 임의의 용어입니다)의 3 가지 수준에서 길이 단어가 오는 형식 단어가 있습니다. 여기

[email protected]:~/stackoverflow/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\[email protected]\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' 

이 (점진적 개발) 스크립트입니다 위의 덤프 :

은 개요입니다

[email protected]:~/stackoverflow/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) 

각 레코드는 버전 번호로 표시되는 subrecord 형 0xa는있다 일종의. 서브 레코드 유형 0x3은 길이로 판단하는 GUID 일 수 있습니다. 유형 0x1 및 0xd는 설명 적입니다. 어떤 서브 레코드 유형 0x7과 0x2가 될지 전혀 모른다. 아마도 0x7은 일치하는 .dll 로의 32 비트 오프셋이지만, 0x2 유형의 64 비트 숫자는 특별히 나에게 아무 것도 제안하지 않습니다. 유형 0x8, 20 바이트 길이의 해시 유형 일 수 있습니다. 다른 사람들이 빈칸을 채울 수 있습니다.

문자열 값은 0x0과 0xcccc로 끝납니다. 레코드 유형 0xa는 대부분 문자열 데이터이지만 앞에 0x1 바이트가 있고 고정 길이가 0x24이므로 추가 0x0s가 채워집니다. 모든 레코드 유형이 아닌 다른 레코드 유형도 0xcccc로 끝납니다.

파일은 "index.of dll.aux"에 대한 구글 검색에 의해 얻어, 여기에 발견되었다 : http://www.badelement.co.uk/Movies/Storage/Win-7-Pro_64/Windows/assembly/NativeImages_v4.0.30319_64/System.Net/d79a634a4d873717e2dab52d827ba985/

관련 문제