PE: Implement GetSections()

This commit is contained in:
Katy Coe
2020-12-05 02:09:06 +01:00
parent 381486e322
commit f2b2496999
2 changed files with 22 additions and 3 deletions

View File

@@ -13,7 +13,11 @@ namespace Il2CppInspector
public enum PE : uint public enum PE : uint
{ {
IMAGE_NT_OPTIONAL_HDR32_MAGIC = 0x10b, IMAGE_NT_OPTIONAL_HDR32_MAGIC = 0x10b,
IMAGE_NT_OPTIONAL_HDR64_MAGIC = 0x20b IMAGE_NT_OPTIONAL_HDR64_MAGIC = 0x20b,
IMAGE_SCN_CNT_CODE = 0x00000020,
IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040,
IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080
} }
#pragma warning disable CS0649 #pragma warning disable CS0649
@@ -132,6 +136,8 @@ namespace Il2CppInspector
// _IMAGE_SECTION_HEADER // _IMAGE_SECTION_HEADER
internal class PESection internal class PESection
{ {
public PE Characteristics => (PE) f_Characteristics;
[String(FixedSize=8)] [String(FixedSize=8)]
public string Name; public string Name;
public uint VirtualSize; // Size in memory public uint VirtualSize; // Size in memory
@@ -142,7 +148,7 @@ namespace Il2CppInspector
public uint PointerToLinenumbers; public uint PointerToLinenumbers;
public ushort NumberOfRelocations; public ushort NumberOfRelocations;
public ushort NumberOfLinenumbers; public ushort NumberOfLinenumbers;
public uint Characteristics; public uint f_Characteristics;
} }
// _IMAGE_EXPORT_DIRECTORY // _IMAGE_EXPORT_DIRECTORY

View File

@@ -168,6 +168,19 @@ namespace Il2CppInspector
return pe.ImageBase + section.VirtualAddress + offset - section.PointerToRawData; return pe.ImageBase + section.VirtualAddress + offset - section.PointerToRawData;
} }
// TODO: PEReader.GetSections() public override IEnumerable<Section> GetSections() {
return sections.Select(s => new Section {
VirtualStart = pe.ImageBase + s.VirtualAddress,
VirtualEnd = pe.ImageBase + s.VirtualAddress + s.VirtualSize - 1,
ImageStart = s.PointerToRawData,
ImageEnd = s.PointerToRawData + s.SizeOfRawData - 1,
IsData = (s.Characteristics & PE.IMAGE_SCN_CNT_INITIALIZED_DATA) != 0,
IsExec = (s.Characteristics & PE.IMAGE_SCN_CNT_CODE) != 0,
IsBSS = (s.Characteristics & PE.IMAGE_SCN_CNT_UNINITIALIZED_DATA) != 0 || s.PointerToRawData == 0u,
Name = s.Name
});
}
} }
} }