From f82b64c02efb7204612867b28c804b5163027d11 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 4 Mar 2018 06:58:47 +0000 Subject: [PATCH] Correct decoding of NE alignment shift. --- libexeinfo/NE/Info.cs | 2 +- libexeinfo/NE/NE.cs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libexeinfo/NE/Info.cs b/libexeinfo/NE/Info.cs index a7fb0df..016143e 100644 --- a/libexeinfo/NE/Info.cs +++ b/libexeinfo/NE/Info.cs @@ -201,7 +201,7 @@ namespace libexeinfo sb.AppendLine("\tExecutable is a dynamic library or a driver"); sb.AppendFormat("\tMinimum code swap area: {0} bytes", Header.minimum_swap_area).AppendLine(); - sb.AppendFormat("\tFile alignment shift: {0}", 512 << Header.alignment_shift).AppendLine(); + sb.AppendFormat("\tFile alignment shift: {0}", 1 << Header.alignment_shift).AppendLine(); sb.AppendFormat("\tInitial local heap should be {0} bytes", Header.initial_heap).AppendLine(); sb.AppendFormat("\tInitial stack size should be {0} bytes", Header.initial_stack).AppendLine(); sb.AppendFormat("\tCS:IP entry point: {0:X4}:{1:X4}", (Header.entry_point & 0xFFFF0000) >> 16, diff --git a/libexeinfo/NE/NE.cs b/libexeinfo/NE/NE.cs index fbf1398..84b9fbb 100644 --- a/libexeinfo/NE/NE.cs +++ b/libexeinfo/NE/NE.cs @@ -274,7 +274,7 @@ namespace libexeinfo id = entries[i].ename, name = $"{entries[i].ename}", flags = (ResourceFlags)resourceSegments[i].dwFlags, - dataOffset = (uint)(resourceSegments[i].dwLogicalSectorOffset * 16), + dataOffset = (uint)(resourceSegments[i].dwLogicalSectorOffset << Header.alignment_shift), length = resourceSegments[i].dwSegmentLength }; @@ -283,7 +283,7 @@ namespace libexeinfo if(thisResource.dataOffset == 0) thisResource.dataOffset = 65536; if((resourceSegments[i].dwFlags & (ushort)SegmentFlags.Huge) == (ushort)SegmentFlags.Huge) - thisResource.length *= 16; + thisResource.length <<= Header.alignment_shift; thisResource.data = new byte[thisResource.length]; BaseStream.Position = thisResource.dataOffset; BaseStream.Read(thisResource.data, 0, thisResource.data.Length); @@ -422,12 +422,12 @@ namespace libexeinfo { Flags = $"{(SegmentFlags)(seg.dwFlags & SEGMENT_FLAGS_MASK)}", Name = (SegmentType)(seg.dwFlags & SEGMENT_TYPE_MASK) == SegmentType.Code ? ".text" : ".data", - Offset = seg.dwLogicalSectorOffset * 16, + Offset = seg.dwLogicalSectorOffset << Header.alignment_shift, Size = seg.dwSegmentLength }; if(Header.target_os == TargetOS.OS2 && (seg.dwFlags & (int)SegmentFlags.Huge) == (int)SegmentFlags.Huge) - libseg.Size *= 16; + libseg.Size <<= Header.alignment_shift; libsegs.Add(libseg); }