private void read() { readHeader(); if (header.sig != VSMX_SIGNATURE) { Console.WriteLine(string.Format("Invalid VSMX signature 0x{0:X8}", header.sig)); return; } if (header.ver != VSMX_VERSION) { Console.WriteLine(string.Format("Invalid VSMX version 0x{0:X8}", header.ver)); return; } if (header.codeOffset > header.size()) { Console.WriteLine(string.Format("VSMX: skipping range after header: 0x{0:X}-0x{1:X}", header.size(), header.codeOffset)); seek(header.codeOffset); } if ((header.codeLength % VSMXGroup.SIZE_OF) != 0) { Console.WriteLine(string.Format("VSMX: code Length is not aligned to 8 bytes: 0x{0:X}", header.codeLength)); } mem = new VSMXMem(); mem.codes = new VSMXGroup[header.codeLength / VSMXGroup.SIZE_OF]; for (int i = 0; i < mem.codes.Length; i++) { mem.codes[i] = new VSMXGroup(); mem.codes[i].id = read32(); mem.codes[i].value = read32(); } mem.texts = readStrings(header.textOffset, header.textLength, header.textEntries, Charset.forName("UTF-16LE"), 2); mem.properties = readStrings(header.propOffset, header.propLength, header.propEntries, Charset.forName("UTF-16LE"), 2); mem.names = readStrings(header.namesOffset, header.namesLength, header.namesEntries, Charset.forName("ISO-8859-1"), 1); //if (log.DebugEnabled) { debug(); } }
public VSMXDecompiler(VSMX vsmx) { mem = vsmx.Mem; }