private void _UpdateModuleExports()
{
//var BaseMemoryStream = ElfLoader.MemoryStream.SliceWithLength(BaseAddress);
var ExportsStream = ElfLoader.MemoryStream.SliceWithBounds(HleModuleGuest.ModuleInfo.ExportsStart, HleModuleGuest.ModuleInfo.ExportsEnd);
var ModuleExports = ExportsStream.ReadStructVectorUntilTheEndOfStream<ElfPsp.ModuleExport>();
Console.WriteLine("Exports:");
foreach (var ModuleExport in ModuleExports)
{
String ModuleExportName = "";
try { ModuleExportName = ElfLoader.MemoryStream.ReadStringzAt(ModuleExport.Name); } catch { }
Console.WriteLine(" * Export: '{0}'", ModuleExportName);
var HleModuleExports = new HleModuleExports();
HleModuleExports.Name = ModuleExportName;
HleModuleExports.Flags = ModuleExport.Flags;
HleModuleExports.Version = ModuleExport.Version;
var ExportsExportsStream = ElfLoader.MemoryStream.SliceWithLength(
ModuleExport.Exports,
ModuleExport.FunctionCount * sizeof(uint) * 2 + ModuleExport.VariableCount * sizeof(uint) * 2
);
var FunctionNIDReader = new BinaryReader(ExportsExportsStream.ReadStream(ModuleExport.FunctionCount * sizeof(uint)));
var VariableNIDReader = new BinaryReader(ExportsExportsStream.ReadStream(ModuleExport.VariableCount * sizeof(uint)));
var FunctionAddressReader = new BinaryReader(ExportsExportsStream.ReadStream(ModuleExport.FunctionCount * sizeof(uint)));
var VariableAddressReader = new BinaryReader(ExportsExportsStream.ReadStream(ModuleExport.VariableCount * sizeof(uint)));
for (int n = 0; n < ModuleExport.FunctionCount; n++)
{
uint NID = FunctionNIDReader.ReadUInt32();
uint CallAddress = FunctionAddressReader.ReadUInt32();
HleModuleExports.Functions[NID] = new HleModuleImportsExports.Entry() { Address = CallAddress };
Console.WriteLine(" | - FUNC: {0:X} : {1:X} : {2}", NID, CallAddress, Enum.GetName(typeof(SpecialFunctionNids), NID));
}
for (int n = 0; n < ModuleExport.VariableCount; n++)
{
uint NID = VariableNIDReader.ReadUInt32();
uint CallAddress = VariableAddressReader.ReadUInt32();
HleModuleExports.Variables[NID] = new HleModuleImportsExports.Entry() { Address = CallAddress };
Console.WriteLine(" | - VAR: {0:X} : {1:X} : {2}", NID, CallAddress, Enum.GetName(typeof(SpecialVariableNids), NID));
}
HleModuleGuest.ModulesExports.Add(HleModuleExports);
}
HleModuleGuest.ExportModules();
}