private int analyzeSection(MemoryBlock curMemBlock, TaskMonitor monitor)
			throws MemoryAccessException, AddressOutOfBoundsException,
			ExceptionHandlerFrameException {

		monitor.setMessage("Analyzing .eh_frame_hdr section");

		ProgramLocation loc = new ProgramLocation(program, curMemBlock.getStart());
		Address curAddress = loc.getAddress();

		ExceptionHandlerFrameHeader eh_frame_hdr =
			new ExceptionHandlerFrameHeader(monitor, program);
		eh_frame_hdr.addToDataTypeManager();
		eh_frame_hdr.create(curAddress);

		curAddress = curAddress.add(eh_frame_hdr.getLength());

		// NOTE: The process... method calls that follow are order dependent.
		//       Each one is passed the address of the field it will process and 
		//       returns the next address after that field, which will then be 
		//       used by the next field's process method.

		curAddress = processEncodedFramePointer(curAddress, eh_frame_hdr, curMemBlock);

		DwarfEHDecoder fdeCountDecoder = getFdeCountDecoder(eh_frame_hdr);
		Address fdeCountAddress = curAddress;

		curAddress = markupEncodedFdeCount(fdeCountAddress, fdeCountDecoder);

		int fdeTableCnt = getFdeTableCount(fdeCountAddress, curMemBlock, fdeCountDecoder);
		if (fdeTableCnt > 0) {
			createFdeTable(curAddress, eh_frame_hdr, fdeTableCnt, monitor);
		}
		return fdeTableCnt;
	}
Analyzes and annotates the eh frame header.
@param monitor a status monitor for indicating progress or allowing a task to be cancelled.
@return the number of records in the FDE table or 0 if there was no EH frame header to analyze.
@throws MemoryAccessException if memory couldn't be read/written while processing the header.
@throws AddressOutOfBoundsException if one or more expected addresses weren't in the program.
@throws ExceptionHandlerFrameException if the FDE table can't be decoded.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/exceptionhandlers/gcc/sections/EhFrameHeaderSection.java