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.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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user