What is the difference between a vma and an offset?
An offset is an index into a buffer of bytes, with offset 0 being the first item of the buffer and offset (buffer.size – 1) being the offset of the last item in the buffer. A vma or virtual memory address is the load address of an offset. Some buffer contents (e.g. an executable code segment in a binary file) assume they have been loaded to a specific virtual address; this virtual address is used as the vma for the buffer. This vma is added to an offset into the buffer in order to determine the vma for an instruction. A buffer can always have a load address of 0, meaning that the vma and the offset will be identical for its contents.