Correct decoding of NE alignment shift.

This commit is contained in:
2018-03-04 06:58:47 +00:00
parent 2b4c73a78c
commit f82b64c02e
2 changed files with 5 additions and 5 deletions

View File

@@ -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,

View File

@@ -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);
}