Что этот регистр содержал бы после

Я, может казаться, не выясняю что eax содержит после этой части блока:

mov     edi, [edi+4]
lea     eax, [edi+88h]

С edi указывая на класс

1
задан 小太郎 19 July 2010 в 11:00
поделиться

4 ответа

Эффективный адрес загрузки получает фактический адрес ссылки. По какой-то загадочной причине символическая сборка написана так, как если бы она ссылалась на содержимое edi + 88h, но на самом деле инструкция загружает значение регистра edi плюс константу 088h (эквивалентную ] mov eax, edi; добавить eax, 088h ). Сомневаюсь, что edi + 4 - это указатель на функцию: скорее, это указатель на vtbl или массив.

2
ответ дан 2 September 2019 в 22:56
поделиться

Долгая перспектива, так как я ничего не знаю о вашем классе, но все равно здесь.

Есть ли у вас множественное наследование? Возможно, edi + 4 - вторая виртуальная таблица, а [edi + 4] + 88h - указатель функции, которую вы хотите вызвать? Или, в зависимости от вашего компилятора, виртуальная таблица может быть расположена по адресу +4 , в любом случае eax содержит адрес виртуальной функции, которую нужно вызвать.

0
ответ дан 2 September 2019 в 22:56
поделиться

Основываясь на использовании edi , он, вероятно, в конечном итоге указывает на ячейку памяти, но lea не всегда используется так: http: // en .wikipedia.org / wiki / Addressing_mode # Useful_side_effect .

0
ответ дан 2 September 2019 в 22:56
поделиться
mov     edi, [edi+4]
lea     eax, [edi+88h]

    edi points here after 'mov'
    .
    xxxx....................
    |                      ^
xxxx....                   eax points here after 'lea'
^
edi pointed here before 'mov'

char* edi;
void* eax;

edi = *(char**)(edi+4);
eax = edi+0x88;

Похоже, что к какой-то записи там просто получают доступ.

0
ответ дан 2 September 2019 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: