Wenn dir der Typ und Feld bekannt sind (und selbige idealerweise auch noch konstant bleiben), dann kennst du doch den Offset des Feldes und ziehst diesen einfach von der gegebenen Adresse ab und hast die gesuchte Basisadresse.
Code:
//Pseudocode, nicht schlagen :)
type
MyType = record
Var1: Typ1;
Var2: Typ2;
Var3: Typ3;
Var4: Typ4;
end;
CONTAINING_RECORD(Addr, MyType, Var3) = Addr - sizeof(Typ2) - sizeof(Typ1)