Syntax:__offset(type, base, tdelta, target) __offset(type, base, tdelta) __offset(type, base) __offset(type|AUTO, tdelta) __offset(type) __offwheretype is one of:
OFF8 8-bit full offset OFF16 16-bit full offset OFF32 32-bit full offset OFF64 64-bit full offset LOW8 low 8 bits of 16-bit offset LOW16 low 16 bits of 32-bit offset HIGH8 high 8 bits of 16-bit offset HIGH16 high 16 bits of 32-bit offsetThe type can also be the name of a custom refinfo.It can be combined with the following keywords:
RVAOFF based reference (rva) PASTEND reference past an item it may point to an nonexistent address NOBASE forbid the base xref creation implies that the base can be any value nb: base xrefs are created only if the offset base points to the middle of a segment SUBTRACT the reference value is subtracted from the base value instead of (as usual) being added to it SIGNEDOP the operand value is sign-extended (only supported for REF_OFF8/16/32/64) NO_ZEROS an opval of 0 will be considered invalid NO_ONES an opval of ~0 will be considered invalid SELFREF the self-based referenceThe base, target delta, and the target can be omitted. If the base is BADADDR, it can be omitted by combining the type with AUTO:__offset(type|AUTO, tdelta)Zero based offsets without any additional attributes and having the size that corresponds the current application target (e.g. REF_OFF32 for a 32-bit bit application), the shoft __off form can be used.Examples:
A 64-bit offset based on the image base:int var __offset(OFF64|RVAOFF);A 32-bit offset based on 0 that may point to an non-existing address:int var __offset(OFF32|PASTEND|AUTO);A 32-bit offset based on 0x400000:int var __offset(OFF32, 0x400000);A simple zero based offset that matches the current application bitness:int var __off;This annotation is useful the type of the pointed object is unknown or the variable size is different from the usual pointer size. Otherwise it is better to use a pointer:type *var;