mirror of
https://github.com/claunia/libexeinfo.git
synced 2025-12-16 19:14:24 +00:00
NE resource format is completely different between Windows and OS/2, only Windows format is known.
This commit is contained in:
@@ -29,7 +29,7 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using Claunia.Encoding;
|
||||
using System.Text;
|
||||
|
||||
namespace libexeinfo
|
||||
{
|
||||
@@ -43,14 +43,14 @@ namespace libexeinfo
|
||||
/// Header for this executable
|
||||
/// </summary>
|
||||
public NEHeader Header;
|
||||
public ResourceTable Resources;
|
||||
public Version[] Versions;
|
||||
public ResidentName[] ResidentNames;
|
||||
public ResidentName[] NonResidentNames;
|
||||
SegmentEntry[] segments;
|
||||
string ModuleName;
|
||||
string ModuleDescription;
|
||||
string[] ImportedNames;
|
||||
string ModuleDescription;
|
||||
string ModuleName;
|
||||
public ResidentName[] NonResidentNames;
|
||||
public ResidentName[] ResidentNames;
|
||||
public ResourceTable Resources;
|
||||
SegmentEntry[] segments;
|
||||
public Version[] Versions;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="T:libexeinfo.NE" /> class.
|
||||
@@ -185,9 +185,8 @@ namespace libexeinfo
|
||||
|
||||
RequiredOperatingSystem = reqOs;
|
||||
|
||||
if(Header.segment_count > 0 &&
|
||||
Header.segment_table_offset > 0 &&
|
||||
(Header.segment_table_offset + BaseExecutable.Header.new_offset) < BaseStream.Length)
|
||||
if(Header.segment_count > 0 && Header.segment_table_offset > 0 &&
|
||||
Header.segment_table_offset + BaseExecutable.Header.new_offset < BaseStream.Length)
|
||||
{
|
||||
BaseStream.Position = Header.segment_table_offset + BaseExecutable.Header.new_offset;
|
||||
segments = new SegmentEntry[Header.segment_count];
|
||||
@@ -217,7 +216,8 @@ namespace libexeinfo
|
||||
if(Header.imported_names_offset >= Header.resource_table_offset &&
|
||||
Header.imported_names_offset <= resourceUpperLimit) resourceUpperLimit = Header.imported_names_offset;
|
||||
|
||||
if(Header.resource_table_offset < resourceUpperLimit && Header.resource_table_offset != 0)
|
||||
if(Header.resource_table_offset < resourceUpperLimit && Header.resource_table_offset != 0 &&
|
||||
(Header.target_os == TargetOS.Windows || Header.target_os == TargetOS.Win32))
|
||||
{
|
||||
Resources = GetResources(BaseStream, BaseExecutable.Header.new_offset, Header.resource_table_offset,
|
||||
resourceUpperLimit);
|
||||
@@ -237,15 +237,15 @@ namespace libexeinfo
|
||||
if(Header.segment_table_offset >= Header.module_reference_offset &&
|
||||
Header.segment_table_offset <= resourceUpperLimit) resourceUpperLimit = Header.segment_table_offset;
|
||||
if(Header.resource_table_offset >= Header.module_reference_offset &&
|
||||
Header.resource_table_offset <= resourceUpperLimit)
|
||||
resourceUpperLimit = Header.resource_table_offset;
|
||||
Header.resource_table_offset <= resourceUpperLimit) resourceUpperLimit = Header.resource_table_offset;
|
||||
if(Header.nonresident_names_offset >= Header.module_reference_offset &&
|
||||
Header.nonresident_names_offset <= resourceUpperLimit)
|
||||
resourceUpperLimit = (ushort)Header.nonresident_names_offset;
|
||||
if(Header.imported_names_offset >= Header.module_reference_offset &&
|
||||
Header.imported_names_offset <= resourceUpperLimit) resourceUpperLimit = Header.imported_names_offset;
|
||||
|
||||
if(Header.module_reference_offset < resourceUpperLimit && Header.module_reference_offset != 0 && Header.reference_count > 0)
|
||||
if(Header.module_reference_offset < resourceUpperLimit && Header.module_reference_offset != 0 &&
|
||||
Header.reference_count > 0)
|
||||
{
|
||||
short[] referenceOffsets = new short[Header.reference_count];
|
||||
buffer = new byte[2];
|
||||
|
||||
Reference in New Issue
Block a user