2013-07-16 4 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

विश्लेषण से पता चलता है कि यह एक काफी सरल प्रारूप होने के लिए (के रूप में हंस 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 जो एक संस्करण संख्या प्रतीत होता है प्रकार के। subrecord प्रकार 0x3 एक GUID हो सकता है, बस इसकी लंबाई के आधार पर। 0x1 और 0xd प्रकार वर्णनात्मक हैं। मुझे कोई सुराग नहीं है कि subrecord प्रकार 0x7 और 0x2 हो सकता है। शायद 0x7 एक 32-बिट मिलान .dll में ऑफसेट है, लेकिन प्रकार 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/

संबंधित मुद्दे