почему делем именно на 8?
Это особенности Декомпиля IDA.
В 32-х битном приложении нужно делить на 4, а в 64-х битном на 8
И еще зависит от самой функции которую ты используешь.
template< typename cData >
cData vFun_Call(PVOID64 BaseClass, DWORD64 vIndex)
{
PDWORD64* vPointer = (PDWORD64*)BaseClass;
PDWORD64 vFunction = *vPointer;
DWORD64 dwAddress = vFunction[vIndex];Тут можно сразу разделить на 8
//DWORD64 dwAddress = vFunction[vIndex/8]; и не прийдется уже там делить.
return (cData)(dwAddress);
}
Некоторые указатели на виртуальные функции получают уже сразу деленными, а некоторые не деленные.
Адрес в 32-х битном приложении занимает 4 байта, а в 64-х битном - 8 байт.
Если есть приставка "i64" значит нужно это значение делить на 8 и получишь индекс этой виртуальной функции.
Вот другой пример:
sub_funk(a1[1])
Вызывается функция sub_funk,в её аргумент передается некий класс (а1) с виртуальной функцией под позицией 1
Немного трудно что-то сказать на маленьком примере, нужно анализировать всю функцию.