mirror of
https://github.com/claunia/libexeinfo.git
synced 2025-12-16 19:14:24 +00:00
Correct decoding of NE alignment shift.
This commit is contained in:
@@ -201,7 +201,7 @@ namespace libexeinfo
|
|||||||
sb.AppendLine("\tExecutable is a dynamic library or a driver");
|
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("\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 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("\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,
|
sb.AppendFormat("\tCS:IP entry point: {0:X4}:{1:X4}", (Header.entry_point & 0xFFFF0000) >> 16,
|
||||||
|
|||||||
@@ -274,7 +274,7 @@ namespace libexeinfo
|
|||||||
id = entries[i].ename,
|
id = entries[i].ename,
|
||||||
name = $"{entries[i].ename}",
|
name = $"{entries[i].ename}",
|
||||||
flags = (ResourceFlags)resourceSegments[i].dwFlags,
|
flags = (ResourceFlags)resourceSegments[i].dwFlags,
|
||||||
dataOffset = (uint)(resourceSegments[i].dwLogicalSectorOffset * 16),
|
dataOffset = (uint)(resourceSegments[i].dwLogicalSectorOffset << Header.alignment_shift),
|
||||||
length = resourceSegments[i].dwSegmentLength
|
length = resourceSegments[i].dwSegmentLength
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -283,7 +283,7 @@ namespace libexeinfo
|
|||||||
if(thisResource.dataOffset == 0)
|
if(thisResource.dataOffset == 0)
|
||||||
thisResource.dataOffset = 65536;
|
thisResource.dataOffset = 65536;
|
||||||
if((resourceSegments[i].dwFlags & (ushort)SegmentFlags.Huge) == (ushort)SegmentFlags.Huge)
|
if((resourceSegments[i].dwFlags & (ushort)SegmentFlags.Huge) == (ushort)SegmentFlags.Huge)
|
||||||
thisResource.length *= 16;
|
thisResource.length <<= Header.alignment_shift;
|
||||||
thisResource.data = new byte[thisResource.length];
|
thisResource.data = new byte[thisResource.length];
|
||||||
BaseStream.Position = thisResource.dataOffset;
|
BaseStream.Position = thisResource.dataOffset;
|
||||||
BaseStream.Read(thisResource.data, 0, thisResource.data.Length);
|
BaseStream.Read(thisResource.data, 0, thisResource.data.Length);
|
||||||
@@ -422,12 +422,12 @@ namespace libexeinfo
|
|||||||
{
|
{
|
||||||
Flags = $"{(SegmentFlags)(seg.dwFlags & SEGMENT_FLAGS_MASK)}",
|
Flags = $"{(SegmentFlags)(seg.dwFlags & SEGMENT_FLAGS_MASK)}",
|
||||||
Name = (SegmentType)(seg.dwFlags & SEGMENT_TYPE_MASK) == SegmentType.Code ? ".text" : ".data",
|
Name = (SegmentType)(seg.dwFlags & SEGMENT_TYPE_MASK) == SegmentType.Code ? ".text" : ".data",
|
||||||
Offset = seg.dwLogicalSectorOffset * 16,
|
Offset = seg.dwLogicalSectorOffset << Header.alignment_shift,
|
||||||
Size = seg.dwSegmentLength
|
Size = seg.dwSegmentLength
|
||||||
};
|
};
|
||||||
|
|
||||||
if(Header.target_os == TargetOS.OS2 && (seg.dwFlags & (int)SegmentFlags.Huge) == (int)SegmentFlags.Huge)
|
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);
|
libsegs.Add(libseg);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user