public TLS Clone() { TLS copy = new TLS(); CopyTo(copy); return(copy); }
public static unsafe TLS Load(PEImage image) { if (image == null) { return(null); } var dd = image.Directories[DataDirectories.TlsTable]; if (dd.IsNull) { return(null); } var tls = new TLS(); tls._image = image; using (var accessor = image.OpenImageToSectionData(dd.RVA)) { if (image.Is32Bits) { TLSHeader32 header; fixed(byte *pBuff = accessor.ReadBytes(sizeof(TLSHeader32))) { header = *(TLSHeader32 *)pBuff; } uint startAddressOfRawDataRVA = (uint)(header.StartAddressOfRawData - image.ImageBase); uint endAddressOfRawDataRVA = (uint)(header.EndAddressOfRawData - image.ImageBase); tls._loadData = true; tls._startAddressOfRawDataRVA = startAddressOfRawDataRVA; tls._length = (int)(endAddressOfRawDataRVA - startAddressOfRawDataRVA); } else { TLSHeader64 header; fixed(byte *pBuff = accessor.ReadBytes(sizeof(TLSHeader64))) { header = *(TLSHeader64 *)pBuff; } uint startAddressOfRawDataRVA = (uint)(header.StartAddressOfRawData - image.ImageBase); uint endAddressOfRawDataRVA = (uint)(header.EndAddressOfRawData - image.ImageBase); tls._loadData = true; tls._startAddressOfRawDataRVA = startAddressOfRawDataRVA; tls._length = (int)(endAddressOfRawDataRVA - startAddressOfRawDataRVA); } } return(tls); }
protected void CopyTo(TLS copy) { copy._data = Data; }