То есть получается sizeofclass это два инта? У меня в реклассе в 8 байтной ячейки 90 1A 00 00 34 00 00 00, один из которых 90 1A 00 00 а другой 34 00 00 00?
в этой 8 байтовой ячейке два инта, первый это 0x1a90 это размер класса как через sizeof, а второй 0x34(я думаю больше short он априори быть не может, где ты видел класс с >32k членов?) но все же может быть intом потому что просто так вальвы захотели. ) это количество нетваров в классе.
ты сначала в x64dbg(реклассе) смотришь на структуру и мысленно себе представляешь какой член за что отвечает, потом вычисляешь оффсеты, потом все это переносишь в визуалку с учетом алайна(выравнивания. суть выравнивания в том что каждый новый член должен иметь оффсет кратный его размеру, то есть
struct{
char x;//0->1
//char pad[1];//тут пустое(ну точнее просто не используемое в твоем коде, а вот место в оперативе занимает) место в 1 байт из-за выравнивания
short p;//2->4, потому что оффсет кратен 2
int y;//4->8 , потому что оффсет кратен 4
int z;//8->12
//char pad2[4];//пустое место в 4 байт из-за выравнивания
u64 w;//16->24, потому что оффсет кратен 8
}
)
моя структура ClassDescription отражает такие оффсеты:
struct ClassDescription {
u64 idk;//0->8
cc classname;//8->16
cc modulename;//16->24
int sizeofclass;//24->28
short Size;//28->30
char pad[6];//30->36
//из-за алайна, так как следующий член u64, то он должен начинаться с ячейки кратной 8. то есть по сути char pad[10] на самом деле тут а не [6]. но как я уже и говорил все эти структуры сделаны мной и для меня, поэтому они сделаны в таком стиле и виде в каком были мои мысли в тот момент, поэтому я для себя просто сделал пометку pad[6] и в уме учел выравнивание и не стал эти 4 байта сюда заносить.
u64 MemberInfo;//40->48
u64 idk2;//48->56
SchemaParent* parent;//56->64
};