private List<RegionDescriptor> analyzeSection(MemoryBlock curMemBlock)
			throws MemoryAccessException, AddressOutOfBoundsException, ExceptionHandlerFrameException {

		monitor.setMessage("Analyzing " + curMemBlock.getName() + " section");
		monitor.setShowProgressValue(true);
		monitor.setIndeterminate(false);
		long bytesInBlock = curMemBlock.getSize();
		monitor.initialize(bytesInBlock);

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

		List<RegionDescriptor> regions = new ArrayList<>();


		while (curAddress != null && curAddress.compareTo(curMemBlock.getEnd()) < 0) {

			monitor.setProgress(curAddress.subtract(startAddr));

			/* Get the Common Information Entry (CIE) */
			Cie cie = getCie(curAddress);

			/* Check for the end of the frame record. */
			if (cie.isEndOfFrame()) {
				break;
			}

			curAddress = cie.getNextAddress();

			/* 
			 * Add each Frame Description Entry (FDE) for the current CIE.
			 */
			while (curAddress != null && (curAddress.compareTo(curMemBlock.getEnd()) < 0)) {

				monitor.setProgress(curAddress.subtract(startAddr));

				Address currFdeAddr = curAddress;

				try {

					FrameDescriptionEntry fde = new FrameDescriptionEntry(monitor, program, this);
					RegionDescriptor region = fde.create(curAddress);

					if (fde.isEndOfFrame()) {
						break;
					}

					if (region != null) {
						regions.add(region);
						createFdeComment(curAddress);
						monitor.incrementProgress(1);
					}

					curAddress = fde.getNextAddress(); // This can be null.

				} catch (ExceptionHandlerFrameException efe) {
					// May have run into another CIE.
					curAddress = currFdeAddr;
					break;
				}
			}

			createAugmentationData(regions, cie);
		}
		return regions;
	}
Analyzes and annotates the eh frame section.

@param fdeTableCount the number of exception handler FDEs.
@return the region descriptors for the eh frame section.
@throws MemoryAccessException if memory couldn't be read/written while processing the eh frame.
@throws AddressOutOfBoundsException if one or more expected addresses weren't in the program.
@throws ExceptionHandlerFrameException if a problem was encountered determining eh frame data.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/exceptionhandlers/gcc/sections/EhFrameSection.java