diff --git a/exeinfo/Program.cs b/exeinfo/Program.cs index e1908e1..b51977a 100644 --- a/exeinfo/Program.cs +++ b/exeinfo/Program.cs @@ -62,47 +62,50 @@ namespace exeinfo { recognized = true; Console.Write(neExe.GetInfo()); - foreach (NE.Version vers in neExe.Versions) + if (neExe.Versions != null) { - Console.WriteLine("\tVersion resource {0}:", vers.Name); - Console.WriteLine("\t\tFile version: {0}", vers.FileVersion); - Console.WriteLine("\t\tProduct version: {0}", vers.ProductVersion); - Console.WriteLine("\t\tFile type: {0}", NE.Version.TypeToString(vers.FileType)); - if (vers.FileType == NE.VersionFileType.VFT_DRV) - Console.WriteLine("\t\tFile subtype: {0} driver", NE.Version.DriverToString(vers.FileSubtype)); - else if (vers.FileType == NE.VersionFileType.VFT_DRV) - Console.WriteLine("\t\tFile subtype: {0} font", NE.Version.FontToString(vers.FileSubtype)); - else if (vers.FileSubtype > 0) - Console.WriteLine("\t\tFile subtype: {0}", (uint)vers.FileSubtype); - Console.WriteLine("\t\tFile flags: {0}", vers.FileFlags); - Console.WriteLine("\t\tFile OS: {0}", NE.Version.OsToString(vers.FileOS)); - - foreach (KeyValuePair> strByLang in vers.StringsByLanguage) + foreach (NE.Version vers in neExe.Versions) { - string cultureName; - string encodingName; + Console.WriteLine("\tVersion resource {0}:", vers.Name); + Console.WriteLine("\t\tFile version: {0}", vers.FileVersion); + Console.WriteLine("\t\tProduct version: {0}", vers.ProductVersion); + Console.WriteLine("\t\tFile type: {0}", NE.Version.TypeToString(vers.FileType)); + if (vers.FileType == NE.VersionFileType.VFT_DRV) + Console.WriteLine("\t\tFile subtype: {0} driver", NE.Version.DriverToString(vers.FileSubtype)); + else if (vers.FileType == NE.VersionFileType.VFT_DRV) + Console.WriteLine("\t\tFile subtype: {0} font", NE.Version.FontToString(vers.FileSubtype)); + else if (vers.FileSubtype > 0) + Console.WriteLine("\t\tFile subtype: {0}", (uint)vers.FileSubtype); + Console.WriteLine("\t\tFile flags: {0}", vers.FileFlags); + Console.WriteLine("\t\tFile OS: {0}", NE.Version.OsToString(vers.FileOS)); - try + foreach (KeyValuePair> strByLang in vers.StringsByLanguage) { - cultureName = new CultureInfo(Convert.ToInt32(strByLang.Key.Substring(0, 4), 16)).DisplayName; - } - catch - { - cultureName = string.Format("unsupported culture 0x{0:X4}", Convert.ToInt32(strByLang.Key.Substring(0, 4), 16)); - } + string cultureName; + string encodingName; - try - { - encodingName = Encoding.GetEncoding(Convert.ToInt32(strByLang.Key.Substring(4), 16)).EncodingName; - } - catch - { - encodingName = string.Format("unsupported encoding 0x{0:X4}", Convert.ToInt32(strByLang.Key.Substring(4), 16)); - } + try + { + cultureName = new CultureInfo(Convert.ToInt32(strByLang.Key.Substring(0, 4), 16)).DisplayName; + } + catch + { + cultureName = string.Format("unsupported culture 0x{0:X4}", Convert.ToInt32(strByLang.Key.Substring(0, 4), 16)); + } - Console.WriteLine("\t\tStrings for {0} in codepage {1}:", cultureName, encodingName); - foreach (KeyValuePair strings in strByLang.Value) - Console.WriteLine("\t\t\t{0}: {1}", strings.Key, strings.Value); + try + { + encodingName = Encoding.GetEncoding(Convert.ToInt32(strByLang.Key.Substring(4), 16)).EncodingName; + } + catch + { + encodingName = string.Format("unsupported encoding 0x{0:X4}", Convert.ToInt32(strByLang.Key.Substring(4), 16)); + } + + Console.WriteLine("\t\tStrings for {0} in codepage {1}:", cultureName, encodingName); + foreach (KeyValuePair strings in strByLang.Value) + Console.WriteLine("\t\t\t{0}: {1}", strings.Key, strings.Value); + } } } } diff --git a/libexeinfo/NE/Info.cs b/libexeinfo/NE/Info.cs index 0bc3dbb..8cf18eb 100644 --- a/libexeinfo/NE/Info.cs +++ b/libexeinfo/NE/Info.cs @@ -206,6 +206,7 @@ namespace libexeinfo } types.Add(type); + System.Console.WriteLine("{0}", stream.Position); } table.types = types.ToArray(); diff --git a/libexeinfo/NE/NE.cs b/libexeinfo/NE/NE.cs index 22ccb93..9b3d461 100644 --- a/libexeinfo/NE/NE.cs +++ b/libexeinfo/NE/NE.cs @@ -70,9 +70,15 @@ namespace libexeinfo Marshal.Copy(buffer, 0, hdrPtr, buffer.Length); Header = (NEHeader)Marshal.PtrToStructure(hdrPtr, typeof(NEHeader)); Marshal.FreeHGlobal(hdrPtr); - IsNE = Header.signature == Signature; - Resources = GetResources(BaseStream, BaseExecutable.Header.new_offset, Header.resource_table_offset); - Versions = GetVersions().ToArray(); + if(Header.signature == Signature) + { + IsNE = true; + if (Header.resource_entries > 0) + { + Resources = GetResources(BaseStream, BaseExecutable.Header.new_offset, Header.resource_table_offset); + Versions = GetVersions().ToArray(); + } + } } } } @@ -97,9 +103,15 @@ namespace libexeinfo Marshal.Copy(buffer, 0, hdrPtr, buffer.Length); Header = (NEHeader)Marshal.PtrToStructure(hdrPtr, typeof(NEHeader)); Marshal.FreeHGlobal(hdrPtr); - IsNE = Header.signature == Signature; - Resources = GetResources(BaseStream, BaseExecutable.Header.new_offset, Header.resource_table_offset); - Versions = GetVersions().ToArray(); + if (Header.signature == Signature) + { + IsNE = true; + if (Header.resource_entries > 0) + { + Resources = GetResources(BaseStream, BaseExecutable.Header.new_offset, Header.resource_table_offset); + Versions = GetVersions().ToArray(); + } + } } } } diff --git a/libexeinfo/libexeinfo.csproj b/libexeinfo/libexeinfo.csproj index caa4ae9..a6d1c8d 100644 --- a/libexeinfo/libexeinfo.csproj +++ b/libexeinfo/libexeinfo.csproj @@ -19,6 +19,7 @@ Library to get information about executable files. https://github.com/claunia/libexeinfo 0.2 + executable MZ NE exe true