Что значит "vtable fixup"?
Я слышал этот термин, "Vtable Fixup", используется. Что это значит? У меня не было успеха, спрашивая Google. Я уже знаю, что такое vtable, поэтому его не нужно определять.
2 ответа
Ответ прост: взломать код, сгенерированный разными компиляторами / языками, можно вместе. Это позволяет среде выполнения находить расположение виртуальных функций, не зная деталей реализации.
Для меня Google показал, что исправления vtable - это особая особенность формата исполняемых файлов PE (Windows). Они обеспечивают эффективный способ реализации vtables (для C++ и других языков), согласно спецификации PE ECMA:
Некоторые языки, которые предпочитают не следовать общей модели времени выполнения системы типов, могут иметь виртуальные функции, которые должны быть представлены в v-таблице. Эти таблицы создаются компилятором, а не средой выполнения. Поиск правильного слота v-таблицы и косвенный вызов через значение, хранящееся в этом слоте, также выполняется компилятором. Поле VtableFixups в заголовке среды выполнения содержит местоположение и размер массива исправлений Vtable (см. Пункт 14.5.1). V-таблицы должны передаваться в секцию чтения-записи PE-файла.
Каждая запись в этом массиве описывает непрерывный массив слотов v-таблицы указанного размера. Каждый слот вначале инициализируется значением токена метаданных для метода, который им нужно вызвать. Во время загрузки образа загрузчик времени выполнения превратит каждую запись в указатель на машинный код для ЦПУ и может вызываться напрямую.