public static SectionHeader readSectionHeader(BinaryReader reader, long index,
			long stringTableOffset) throws IOException {
		SectionHeader result = new SectionHeader();

		result.reader = reader;

		result.name = reader.readAsciiString(index, IMAGE_SIZEOF_SHORT_NAME).trim();
		if (result.name.startsWith("/") && stringTableOffset != -1) {
			try {
				int nameOffset = Integer.parseInt(result.name.substring(1));
				result.name = reader.readAsciiString(stringTableOffset + nameOffset);
			}
			catch (NumberFormatException nfe) {
				// ignore error, section name will remain as it was
			}
		}

		// we need to skip IMAGE_SIZEOF_SHORT_NAME chars no matter what,
		// since those bytes are always allocated
		reader.setPointerIndex(index + IMAGE_SIZEOF_SHORT_NAME);

		result.physicalAddress = result.virtualSize = reader.readNextInt();
		result.virtualAddress = reader.readNextInt();
		result.sizeOfRawData = reader.readNextInt();
		result.pointerToRawData = reader.readNextInt();
		result.pointerToRelocations = reader.readNextInt();
		result.pointerToLinenumbers = reader.readNextInt();
		result.numberOfRelocations = reader.readNextShort();
		result.numberOfLinenumbers = reader.readNextShort();
		result.characteristics = reader.readNextInt();

		return result;
	}
Read a {@link SectionHeader} from the specified stream starting at {@code index}.
 
@param reader {@link BinaryReader} to read from
@param index long offset in the reader where the section header starts
@param stringTableOffset offset of the string table, or -1 if not available
@return new {@link SectionHeader}
@throws IOException if error reading data
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/SectionHeader.java