code: NativeObject getObject(int offset) {
          long newAddress = 0L;
          switch (addressSize()) {
              case 8:
                  newAddress = unsafe.getLong(offset + address);
                  break;
              case 4:
                  newAddress = unsafe.getInt(offset + address) & 0x00000000FFFFFFFF;
                  break;
              default:
                  throw new InternalError("Address size not supported");
          }
  
          return new NativeObject(newAddress);
      }
docs: Reads an address from this native object at the given offset and
  constructs a native object using that address.
  
  @param  offset
  The offset of the address to be read.  Note that the size of an
  address is implementation-dependent.
  
  @return The native object created using the address read from the
  given offset