diff --git a/BurnOutSharp.Builder/NewExecutable.cs b/BurnOutSharp.Builder/NewExecutable.cs
index c673b607..954c846e 100644
--- a/BurnOutSharp.Builder/NewExecutable.cs
+++ b/BurnOutSharp.Builder/NewExecutable.cs
@@ -101,11 +101,14 @@ namespace BurnOutSharp.Builder
tableAddress = initialOffset
+ (int)stub.Header.NewExeHeaderAddr
+ executableHeader.ResidentNameTableOffset;
+ int endOffset = initialOffset
+ + (int)stub.Header.NewExeHeaderAddr
+ + executableHeader.ModuleReferenceTableOffset;
if (tableAddress >= data.Length)
return executable;
// Try to parse the resident-name table
- var residentNameTable = ParseResidentNameTable(data, tableAddress, executableHeader.ModuleReferenceTableOffset);
+ var residentNameTable = ParseResidentNameTable(data, tableAddress, endOffset);
if (residentNameTable == null)
return null;
@@ -139,11 +142,14 @@ namespace BurnOutSharp.Builder
tableAddress = initialOffset
+ (int)stub.Header.NewExeHeaderAddr
+ executableHeader.ImportedNamesTableOffset;
+ endOffset = initialOffset
+ + (int)stub.Header.NewExeHeaderAddr
+ + executableHeader.EntryTableOffset;
if (tableAddress >= data.Length)
return executable;
// Try to parse the imported-name table
- var importedNameTable = ParseImportedNameTable(data, tableAddress, executableHeader.EntryTableOffset);
+ var importedNameTable = ParseImportedNameTable(data, tableAddress, endOffset);
if (importedNameTable == null)
return null;
@@ -158,11 +164,15 @@ namespace BurnOutSharp.Builder
tableAddress = initialOffset
+ (int)stub.Header.NewExeHeaderAddr
+ executableHeader.EntryTableOffset;
+ endOffset = initialOffset
+ + (int)stub.Header.NewExeHeaderAddr
+ + executableHeader.EntryTableOffset
+ + executableHeader.EntryTableSize;
if (tableAddress >= data.Length)
return executable;
// Try to parse the entry table
- var entryTable = ParseEntryTable(data, tableAddress, (ushort)(executableHeader.EntryTableOffset + executableHeader.EntryTableSize));
+ var entryTable = ParseEntryTable(data, tableAddress, endOffset);
if (entryTable == null)
return null;
@@ -177,11 +187,15 @@ namespace BurnOutSharp.Builder
tableAddress = initialOffset
+ (int)stub.Header.NewExeHeaderAddr
+ (int)executableHeader.NonResidentNamesTableOffset;
+ endOffset = initialOffset
+ + (int)stub.Header.NewExeHeaderAddr
+ + (int)executableHeader.NonResidentNamesTableOffset
+ + executableHeader.NonResidentNameTableSize;
if (tableAddress >= data.Length)
return executable;
// Try to parse the nonresident-name table
- var nonResidentNameTable = ParseNonResidentNameTable(data, tableAddress, (ushort)(executableHeader.NonResidentNamesTableOffset + executableHeader.NonResidentNameTableSize));
+ var nonResidentNameTable = ParseNonResidentNameTable(data, tableAddress, endOffset);
if (nonResidentNameTable == null)
return null;
@@ -341,7 +355,7 @@ namespace BurnOutSharp.Builder
/// Offset into the byte array
/// First address not part of the resident-name table
/// Filled resident-name table on success, null on error
- private static ResidentNameTableEntry[] ParseResidentNameTable(byte[] data, int offset, ushort endOffset)
+ private static ResidentNameTableEntry[] ParseResidentNameTable(byte[] data, int offset, int endOffset)
{
// TODO: Use marshalling here instead of building
var residentNameTable = new List();
@@ -387,7 +401,7 @@ namespace BurnOutSharp.Builder
/// Offset into the byte array
/// First address not part of the imported-name table
/// Filled imported-name table on success, null on error
- private static Dictionary ParseImportedNameTable(byte[] data, int offset, ushort endOffset)
+ private static Dictionary ParseImportedNameTable(byte[] data, int offset, int endOffset)
{
// TODO: Use marshalling here instead of building
var importedNameTable = new Dictionary();
@@ -411,7 +425,7 @@ namespace BurnOutSharp.Builder
/// Offset into the byte array
/// First address not part of the entry table
/// Filled entry table on success, null on error
- private static EntryTableBundle[] ParseEntryTable(byte[] data, int offset, ushort endOffset)
+ private static EntryTableBundle[] ParseEntryTable(byte[] data, int offset, int endOffset)
{
// TODO: Use marshalling here instead of building
var entryTable = new List();
@@ -451,7 +465,7 @@ namespace BurnOutSharp.Builder
/// Offset into the byte array
/// First address not part of the nonresident-name table
/// Filled nonresident-name table on success, null on error
- private static NonResidentNameTableEntry[] ParseNonResidentNameTable(byte[] data, int offset, ushort endOffset)
+ private static NonResidentNameTableEntry[] ParseNonResidentNameTable(byte[] data, int offset, int endOffset)
{
// TODO: Use marshalling here instead of building
var residentNameTable = new List();
@@ -564,12 +578,15 @@ namespace BurnOutSharp.Builder
tableAddress = initialOffset
+ (int)stub.Header.NewExeHeaderAddr
+ executableHeader.ResidentNameTableOffset;
+ int endOffset = initialOffset
+ + (int)stub.Header.NewExeHeaderAddr
+ + executableHeader.ModuleReferenceTableOffset;
if (tableAddress >= data.Length)
return executable;
// Try to parse the resident-name table
data.Seek(tableAddress, SeekOrigin.Begin);
- var residentNameTable = ParseResidentNameTable(data, executableHeader.ModuleReferenceTableOffset);
+ var residentNameTable = ParseResidentNameTable(data, endOffset);
if (residentNameTable == null)
return null;
@@ -604,12 +621,15 @@ namespace BurnOutSharp.Builder
tableAddress = initialOffset
+ (int)stub.Header.NewExeHeaderAddr
+ executableHeader.ImportedNamesTableOffset;
+ endOffset = initialOffset
+ + (int)stub.Header.NewExeHeaderAddr
+ + executableHeader.EntryTableOffset;
if (tableAddress >= data.Length)
return executable;
// Try to parse the imported-name table
data.Seek(tableAddress, SeekOrigin.Begin);
- var importedNameTable = ParseImportedNameTable(data, executableHeader.EntryTableOffset);
+ var importedNameTable = ParseImportedNameTable(data, endOffset);
if (importedNameTable == null)
return null;
@@ -624,12 +644,16 @@ namespace BurnOutSharp.Builder
tableAddress = initialOffset
+ (int)stub.Header.NewExeHeaderAddr
+ executableHeader.EntryTableOffset;
+ endOffset = initialOffset
+ + (int)stub.Header.NewExeHeaderAddr
+ + executableHeader.EntryTableOffset
+ + executableHeader.EntryTableSize;
if (tableAddress >= data.Length)
return executable;
// Try to parse the imported-name table
data.Seek(tableAddress, SeekOrigin.Begin);
- var entryTable = ParseEntryTable(data, (ushort)(executableHeader.EntryTableOffset + executableHeader.EntryTableSize));
+ var entryTable = ParseEntryTable(data, endOffset);
if (entryTable == null)
return null;
@@ -644,12 +668,16 @@ namespace BurnOutSharp.Builder
tableAddress = initialOffset
+ (int)stub.Header.NewExeHeaderAddr
+ (int)executableHeader.NonResidentNamesTableOffset;
+ endOffset = initialOffset
+ + (int)stub.Header.NewExeHeaderAddr
+ + (int)executableHeader.NonResidentNamesTableOffset
+ + executableHeader.NonResidentNameTableSize;
if (tableAddress >= data.Length)
return executable;
// Try to parse the nonresident-name table
data.Seek(tableAddress, SeekOrigin.Begin);
- var nonResidentNameTable = ParseNonResidentNameTable(data, (ushort)(executableHeader.NonResidentNamesTableOffset + executableHeader.NonResidentNameTableSize));
+ var nonResidentNameTable = ParseNonResidentNameTable(data, endOffset);
if (nonResidentNameTable == null)
return null;
@@ -806,7 +834,7 @@ namespace BurnOutSharp.Builder
/// Stream to parse
/// First address not part of the resident-name table
/// Filled resident-name table on success, null on error
- private static ResidentNameTableEntry[] ParseResidentNameTable(Stream data, ushort endOffset)
+ private static ResidentNameTableEntry[] ParseResidentNameTable(Stream data, int endOffset)
{
// TODO: Use marshalling here instead of building
var residentNameTable = new List();
@@ -850,7 +878,7 @@ namespace BurnOutSharp.Builder
/// Stream to parse
/// First address not part of the imported-name table
/// Filled imported-name table on success, null on error
- private static Dictionary ParseImportedNameTable(Stream data, ushort endOffset)
+ private static Dictionary ParseImportedNameTable(Stream data, int endOffset)
{
// TODO: Use marshalling here instead of building
var importedNameTable = new Dictionary();
@@ -873,7 +901,7 @@ namespace BurnOutSharp.Builder
/// Stream to parse
/// First address not part of the entry table
/// Filled entry table on success, null on error
- private static EntryTableBundle[] ParseEntryTable(Stream data, ushort endOffset)
+ private static EntryTableBundle[] ParseEntryTable(Stream data, int endOffset)
{
// TODO: Use marshalling here instead of building
var entryTable = new List();
@@ -912,7 +940,7 @@ namespace BurnOutSharp.Builder
/// Stream to parse
/// First address not part of the nonresident-name table
/// Filled nonresident-name table on success, null on error
- private static NonResidentNameTableEntry[] ParseNonResidentNameTable(Stream data, ushort endOffset)
+ private static NonResidentNameTableEntry[] ParseNonResidentNameTable(Stream data, int endOffset)
{
// TODO: Use marshalling here instead of building
var residentNameTable = new List();