public Instruction getInstructionContaining(Address address, boolean usePrototypeLength) {
		lock.acquire();
		try {
			Instruction instr = getInstructionAt(address);
			if (instr != null) {
				return instr;
			}

			instr = this.getInstructionBefore(address);
			if (instr != null) {
				Address endAddr;
				if (usePrototypeLength && instr.isLengthOverridden()) {
					endAddr = instr.getMinAddress().add(instr.getParsedLength() - 1);
				}
				else {
					endAddr = instr.getMaxAddress();
				}
				if (address.compareTo(endAddr) <= 0) {
					return instr;
				}
			}
			return null;
		}
		finally {
			lock.release();
		}
	}
Returns an instruction whose min address is less than or equal to the specified address and 
whose max address is greater than or equal to the specified address.
If {@code usePrototypeLength==true}
<pre>{@literal
instruction.getMinAddress() <= addr <= 
   instruction.getMinAddress().add(instruction.getPrototype().getLength() - 1)
}</pre>
If {@code usePrototypeLength==false}
<pre>{@literal
   instruction.getMinAddress() <= addr <= instruction.getMaxAddress()
}</pre>
The use of the prototype length is required when guarding against memory modifications.  If
a length-override is present only one of the entangled instructions will be returned and is
intended to simply indicate the presence of a conflict.
@param address the address to be contained 
@param usePrototypeLength if actual prototype length should be considered when identifying a 
conflict (required when checking for memory modification conflicts), otherwise code unit
length is used.  These lengths can vary when a
{@link Instruction#setLengthOverride(int) length-override} is in affect for an instruction.
@return the instruction containing the specified address, or null if a 
instruction does not exist
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java