Beispiel #1
0
        /// <summary>
        /// Gets the virtual address of a memory operand
        /// </summary>
        /// <param name="elementIndex">Only used if it's a vsib memory operand. This is the element index of the vector index register.</param>
        /// <param name="getRegisterValue">Delegate that returns the value of a register or the base address of a segment register</param>
        /// <returns></returns>
        public readonly ulong GetVirtualAddress(int elementIndex, VAGetRegisterValue getRegisterValue)
        {
            if (getRegisterValue is null)
            {
                throw new ArgumentNullException(nameof(getRegisterValue));
            }
            var provider = new VARegisterValueProviderDelegateImpl(getRegisterValue);

            if (TryGetVirtualAddress(elementIndex, provider, out var result))
            {
                return(result);
            }
            return(0);
        }
Beispiel #2
0
 public VARegisterValueProviderDelegateImpl(VAGetRegisterValue getRegisterValue) =>
 this.getRegisterValue = getRegisterValue ?? throw new ArgumentNullException(nameof(getRegisterValue));