protected virtual long GetRealAddress(long address, RefKinds kind) { switch (kind) { case RefKinds.Auto: if (address >= Info.ImageBase) { return(address - Info.ImageBase); } else { return(Address + address); } case RefKinds.Virtual: //if (Info.ImageBase <= 0) throw new Exception("非法镜像基址!"); //if (address < Info.ImageBase) throw new Exception(String.Format("非法地址 0x{0:X}", address)); if (address < Info.ImageBase) { return(0); } return(address - Info.ImageBase); case RefKinds.Relative: return(Address + address); case RefKinds.Absolute: return(address); default: break; } return(address); }
public DataFieldAttribute(Type type, RefKinds kind) { RefType = type; RefKind = kind; }