Что значит "vtable fixup"? - PullRequest
       14

Что значит "vtable fixup"?

3 голосов
/ 08 февраля 2010

Я слышал этот термин "vtable fixup", используемый. Что это значит? У меня не было успеха, спрашивая Google. Я уже знаю, что такое vtable, поэтому его не нужно определять.

Ответы [ 2 ]

5 голосов
/ 09 февраля 2010

Для меня Google показал, что исправления vtable являются особой функцией формата исполняемых файлов PE (Windows). Они обеспечивают эффективный способ реализации vtables (для C ++ и других языков), в соответствии с спецификацией ECMA :

Некоторые языки, которые предпочитают не следовать общему времени выполнения системы типов модель, может иметь виртуальные функции которые должны быть представлены в v-таблицы. Эти V-таблицы выложены компилятором, а не средой выполнения. Нахождение правильного слота V-таблицы и вызывая косвенно через значение проводится в этом слоте также делается компилятор. Поле VtableFixups в заголовок времени выполнения содержит расположение и размер массива Исправления Vtable (см. Пункт 14.5.1). V-таблицы должны быть выброшены в раздел чтения-записи PE-файла.

Каждая запись в этом массиве описывает непрерывный массив слотов V-таблицы указанный размер. Каждый слот начинается инициализирован в токен метаданных значение для метода, который им нужен вызов. Во время загрузки изображения время выполнения Загрузчик превратит каждую запись в указатель на машинный код для процессора и может быть вызван напрямую.

4 голосов
/ 09 февраля 2010

Простой ответ: взломать возможность сосуществования кода, созданного различными компиляторами / языками. Это позволяет среде выполнения находить местоположения виртуальных функций, не зная деталей реализации.

...