public async Task <DataContent> GetContentAsync() { if (VirtualAddress == 0 || Size == 0) { return(null); } switch (DirectoryType) { case DataDirectoryType.LoadConfigTable: return(await LoadConfigurationDirectory.GetAsync(_image).ConfigureAwait(false)); case DataDirectoryType.TLSTable: return(await TLSDirectory.GetAsync(_image).ConfigureAwait(false)); case DataDirectoryType.CertificateTable: return(await Certificate.GetAsync(_image).ConfigureAwait(false)); case DataDirectoryType.CLRRuntimeHeader: return(await CLR.GetAsync(_image).ConfigureAwait(false)); case DataDirectoryType.Debug: return(await DebugDirectory.GetAsync(_image).ConfigureAwait(false)); case DataDirectoryType.BaseRelocationTable: return(await RelocationTable.GetAsync(_image).ConfigureAwait(false)); case DataDirectoryType.ExportTable: return(await ExportDirectory.GetAsync(_image).ConfigureAwait(false)); case DataDirectoryType.ImportTable: return(await ImportDirectory.GetAsync(_image).ConfigureAwait(false)); case DataDirectoryType.DelayImportDescriptor: return(await DelayedImportDirectory.GetAsync(_image).ConfigureAwait(false)); case DataDirectoryType.ExceptionTable: return(await ExceptionTable.GetAsync(_image).ConfigureAwait(false)); case DataDirectoryType.ResourceTable: return(await ResourceDirectory.GetAsync(_image).ConfigureAwait(false)); default: { var calc = _image.GetCalculator(); var fileOffset = calc.RVAToOffset(VirtualAddress); var va = _imageBase + VirtualAddress; var location = new Location(_image, fileOffset, VirtualAddress, va, Size, Size); return(new DataContent(_image, this, location)); } } }