Re[66]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: vdimas Россия  
Дата: 14.09.21 16:11
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Ага, значит TypeHandle может быть как указателем на MethodTable, так и указателем на TypeDesc, в зависимости от типа объекта. Для массивов он указывает на TypeDesc. Тип object[][] — это массив, элементами которого являются object[], для которых TypeHandle=TypeDesc. Эта информация объясняет наш пример, но всё ещё остаются некоторые вопросы. Например: а как же отличить, на что именно указывает TypeHandle? Поможет нам в этом дальнейшее изучение исходников CLI:


S>Всё зависит от второго бита в адресе: нулевое значение определяет MethodTable, а единичное — TypeDesc. Если мы работаем с шестнадцатеричными адресами, то можно легко определить вид TypeHandle по последней цифре:


Это всё тебе потребуется, если ты ручками берёшь св-во TypeHandle.
Но компилятор не берёт ничего ручками, он берёт фиксированное смещение и ничего не делает с адресом VMT, т.е. не накладывает маску в попытке обнулить младший бит.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.