public long parseUnsignedLong(DWARFAttribute attribute, long defaultValue)
			throws IOException, DWARFExpressionException {
		FoundAttribute attrInfo = findAttribute(attribute);
		if (attrInfo == null) {
			return defaultValue;
		}

		DWARFAttributeValue attr = attrInfo.attr;
		if (attr instanceof DWARFNumericAttribute dnum) {
			return dnum.getUnsignedValue();
		}
		else if (attr instanceof DWARFBlobAttribute dblob) {
			byte[] exprBytes = dblob.getBytes();
			DWARFExpressionEvaluator evaluator =
				new DWARFExpressionEvaluator(attrInfo.die().getCompilationUnit());
			DWARFExpression expr = evaluator.readExpr(exprBytes);

			evaluator.evaluate(expr, 0);
			return evaluator.pop();
		}
		else {
			throw new IOException("Not integer attribute: %s".formatted(attr));
		}
	}
Returns the unsigned integer value of the requested attribute after resolving
any DWARF expression opcodes.

@param attribute {@link DWARFAttribute} id
@param defaultValue value to return if attribute is not present
@return unsigned long value, or the defaultValue if attribute is not present
@throws IOException if error reading value or invalid value type
@throws DWARFExpressionException if error evaluating a DWARF expression
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/DIEAggregate.java