Перейти к содержанию

Существует ли указатель в объекте?


Рекомендуемые сообщения

У меня вопрос насчёт устройства методов, которые существуют внутри объекта (в памяти)
Допустим с виртуальными все понятно, и вызываются они через vtable. 
А возможно ли найти обычную функцию внутри объекта? (в памяти) Т.е лежат ли там указатели на все методы класса? Или для _thiscall конвенции это так не работает?

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, roma912 сказал:

Допустим с виртуальными все понятно, и вызываются они через vtable

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

Ссылка на комментарий
Поделиться на другие сайты

36 минут назад, Xipho сказал:

Среди них  ты с большой вероятностью найдешь все публичные методы класса (имея указатель на его экземпляр)

В том и проблема, что виртуальный метод в исходном коде есть, а в самом VTable AUIManager его не имеется...
Ну и если взять указатель на этот класс, то внутри него также не имеется указателя на данный метод

Спойлер

image.thumb.png.b5b05def12f44a8907ab622a2f02ba69.png


 

Ссылка на комментарий
Поделиться на другие сайты

17 минут назад, roma912 сказал:

виртуальный метод в исходном коде есть, а в самом VTable AUIManager его не имеется...

Есть вероятность, что он просто не реализован в том классе, про который ты говоришь, тогда указателя не будет в vtable, если я правильно помню. Но может быть причина в другом, надо конкретно смотреть...

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Xipho сказал:

Но может быть причина в другом, надо конкретно смотреть...

Вот для конкретности. Есть базовый класс AUIManager, в котором virtual PAUIDIALOG GetDialog(const char *pszName); - Метод для получения окна по имени, он точно реализован.
Ставлю точку на вызов метода с нужным именем окна, нахожу указатель на класс из Ecx и Reclass уже подсказывает что это CECLoginUIMan, где базовый класс AUIManager

Спойлер

image.thumb.png.7296572c208b63775e762294929909f2.png

image.thumb.png.2cb024c238d3ef2d300cef562fa46aad.png

 


Логично предположить, что этот метод будет и в CECLoginUIMan, однако указатель на нее найти не получается
Если предположение не точное, то возможно ли выйти на базовый класс (AUIManager) через  (CECLoginUIMan) и взять его указатель? А потом еще глубже в нем найти указатель через VTable на метод GetDialog?

 

  

Ссылка на комментарий
Поделиться на другие сайты

7 часов назад, roma912 сказал:

то возможно ли выйти на базовый класс (AUIManager)

Не совсем понял, что ты имеешь в виду. Если базовый класс абстрактный, то его экземпляры не создаются в памяти. Но вообще случай любопытный. Что это за игра? На досуге хочу поковырять.

Ссылка на комментарий
Поделиться на другие сайты

Насколько я понял никакого виртуального метода у данного объекта нет, т.к. тут _thiscall и передается указатель на EC_LoginUIMan
Если существуют какие-то варианты вызова метода без поиска данного указателя EC_LoginUIMan или установки хука, то готов прочитать пару статей об этом.
image.thumb.png.cb39ecd47c03f861b20ab49566a893e5.png

 

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.