roma912 Опубликовано 30 апреля, 2021 Поделиться Опубликовано 30 апреля, 2021 У меня вопрос насчёт устройства методов, которые существуют внутри объекта (в памяти) Допустим с виртуальными все понятно, и вызываются они через vtable. А возможно ли найти обычную функцию внутри объекта? (в памяти) Т.е лежат ли там указатели на все методы класса? Или для _thiscall конвенции это так не работает? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 30 апреля, 2021 Поделиться Опубликовано 30 апреля, 2021 3 часа назад, roma912 сказал: Допустим с виртуальными все понятно, и вызываются они через vtable Виртуальные методы - это не методы. Это указатели на методы, переопределенные, или, точнее, реализованные в дочерних классах. Среди них ты с большой вероятностью найдешь все публичные методы класса (имея указатель на его экземпляр), а вот насчет приватных сходу не скажу. Ссылка на комментарий Поделиться на другие сайты Поделиться
roma912 Опубликовано 30 апреля, 2021 Автор Поделиться Опубликовано 30 апреля, 2021 36 минут назад, Xipho сказал: Среди них ты с большой вероятностью найдешь все публичные методы класса (имея указатель на его экземпляр) В том и проблема, что виртуальный метод в исходном коде есть, а в самом VTable AUIManager его не имеется... Ну и если взять указатель на этот класс, то внутри него также не имеется указателя на данный метод Спойлер Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 30 апреля, 2021 Поделиться Опубликовано 30 апреля, 2021 17 минут назад, roma912 сказал: виртуальный метод в исходном коде есть, а в самом VTable AUIManager его не имеется... Есть вероятность, что он просто не реализован в том классе, про который ты говоришь, тогда указателя не будет в vtable, если я правильно помню. Но может быть причина в другом, надо конкретно смотреть... Ссылка на комментарий Поделиться на другие сайты Поделиться
roma912 Опубликовано 30 апреля, 2021 Автор Поделиться Опубликовано 30 апреля, 2021 2 часа назад, Xipho сказал: Но может быть причина в другом, надо конкретно смотреть... Вот для конкретности. Есть базовый класс AUIManager, в котором virtual PAUIDIALOG GetDialog(const char *pszName); - Метод для получения окна по имени, он точно реализован. Ставлю точку на вызов метода с нужным именем окна, нахожу указатель на класс из Ecx и Reclass уже подсказывает что это CECLoginUIMan, где базовый класс AUIManager Спойлер Логично предположить, что этот метод будет и в CECLoginUIMan, однако указатель на нее найти не получается Если предположение не точное, то возможно ли выйти на базовый класс (AUIManager) через (CECLoginUIMan) и взять его указатель? А потом еще глубже в нем найти указатель через VTable на метод GetDialog? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 1 мая, 2021 Поделиться Опубликовано 1 мая, 2021 7 часов назад, roma912 сказал: то возможно ли выйти на базовый класс (AUIManager) Не совсем понял, что ты имеешь в виду. Если базовый класс абстрактный, то его экземпляры не создаются в памяти. Но вообще случай любопытный. Что это за игра? На досуге хочу поковырять. Ссылка на комментарий Поделиться на другие сайты Поделиться
roma912 Опубликовано 1 мая, 2021 Автор Поделиться Опубликовано 1 мая, 2021 Насколько я понял никакого виртуального метода у данного объекта нет, т.к. тут _thiscall и передается указатель на EC_LoginUIMan Если существуют какие-то варианты вызова метода без поиска данного указателя EC_LoginUIMan или установки хука, то готов прочитать пару статей об этом. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения