The normal offset is a location in the memory, it can be a global variable, a function, or just a location inside a function.
In most cases in modding it is a function which you can point to ( Function Pointers ) or hook.
The ones like 0x28 are fields, they usually are found inside structures or classes, the way you use them is you get an instance of the structure/class such as the first parameter of an update function for example, then you dereference the instance plus the offset and you got the value of it, you can then just save it or change it.
Better example in code:
C:
// Inst is the class of this update function.
void hkupdate(void* inst){
if (inst){ // if the instance exists
// dereference it to get the value, then we change it to a 1
*(int*)((std::uint64_t)inst + 0x28) = 1;
}
oupdate(inst);
}
This is a really basic explanation but if you wanna go more in depth into this then learn how memory works