singrdk/base/Kernel/Singularity/Loader/SectionHeader.cs

75 lines
2.5 KiB
C#
Raw Normal View History

2008-03-05 09:52:00 -05:00
///////////////////////////////////////////////////////////////////////////////
//
// Microsoft Research Singularity
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
//
// Simple PE Loader for Singularity
//
// Currently does not support:
// x64
// sections loaded at separate addresses
// loading at preferred address
// #define verbose
namespace Microsoft.Singularity.Loader
{
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
using Microsoft.Singularity;
using Microsoft.Singularity.Io;
[CLSCompliant(false)]
internal struct SectionHeader
{
internal const uint IMAGE_SCN_MEM_DISCARDABLE = 0x02000000; // Can be discarded.
internal const uint IMAGE_SCN_MEM_READ = 0x40000000; // Is readable.
internal const uint IMAGE_SCN_MEM_WRITE = 0x80000000; // Is writeable.
// State
internal readonly String name;
internal readonly uint virtualSize;
internal readonly uint virtualAddress;
internal readonly uint sizeOfRawData;
internal readonly uint pointerToRawData;
internal readonly uint characteristics;
internal SectionHeader(IoMemory mem, ref int offset)
{
if (offset + 40 > mem.Length) {
Error.AccessOutOfRange();
}
name = mem.ReadAsciiZeroString(offset, 8);
virtualSize = mem.Read32Unchecked(offset + 8);
virtualAddress = mem.Read32Unchecked(offset + 12);
sizeOfRawData = mem.Read32Unchecked(offset + 16);
pointerToRawData = mem.Read32Unchecked(offset + 20);
characteristics = mem.Read32Unchecked(offset + 36);
offset += 40;
}
[Conditional("DEBUG")]
internal void DumpToStream()
{
Tracing.Log(Tracing.Debug,
" {0:x8}..{1:x8} [{2:x8}..{3:x8}] char={4:x8}",
virtualAddress, virtualAddress + virtualSize,
pointerToRawData, pointerToRawData + sizeOfRawData,
characteristics);
}
internal bool IsDiscardable
{
get { return ((characteristics & IMAGE_SCN_MEM_DISCARDABLE) != 0); }
}
}
}