298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
|
||||||
1 | ||||||
Указатель на метод класса21.04.2017, 06:09. Показов 2107. Ответов 16
Метки нет Все метки)
(
Есть для этого какой-нибудь инструмент? Интересует именно не ссылка, а указатель. Хочется примерно следующего:
0
|
|
21.04.2017, 06:09 | |
Ответы с готовыми решениями:
16
Как передать в метод класса Menu указатель на метод дочернего класса?
Указатель на метод класса в качестве аргумента метода класса Указатель на метод класса |
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
|
||||||
21.04.2017, 06:45 [ТС] | 3 | |||||
Да я же вроде и описал =)
Нужно сделать хук В данный момент приходится делать так:
0
|
Любитель чаепитий
|
||||||
21.04.2017, 06:49 | 4 | |||||
где?
непонятные хуки и обрывки кода показываешься какие-то пока что. что за хук, что должен делать? тебе нужен указатель на функцию-член или как? почему тема так названа? ![]()
0
|
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
|
|||||||||||
21.04.2017, 06:58 [ТС] | 5 | ||||||||||
Чуть более подробно:
Hook выглядит примерно так
Я на C++ не писал со времен выхода C++11, и не очень ориентируюсь в его терминах. Имел ввиду я примерно следующее: вот этот самый указатель/ссылка/что бы то ни было
По ту сторону Hook() это всего лишь адрес, факт того, что это __thiscall функция мне нужен только в пределах этого места Как это должно работать: Hook перенаправляет оригинальную Test() (метод класса в другом исполняемом файле) в мою _Test(). При этом мне хотелось бы чтобы он не отжирал у меня указатель на this и я мог вызвать его оригинал по адресу через __thiscall (ну тут уже хоть через __stdcall с __asm { mov ecx, this } , это уже не так критично) Не может же быть, что плюсовые методы хукаются таким грязным способом? Именно сами функции, а не vftable
0
|
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
|
|
21.04.2017, 07:11 [ТС] | 7 |
Я же еще раз говорю: внутри Hook мне не важен тип указателя, там я патчу 5 байтиков на jmp по адресу, и будь это хоть __thiscall или __fastcall - не имеет значения, Hook делает свою работу. Т.е. мне нужно получить сам адрес. void*/uintptr_t/DWORD - не важно, но это должно быть число
Добавлено через 3 минуты Еще раз на всякий случай: конечная цель заключается не в получении этого самого адреса, а в уменьшении мук с хуком метода класса Если есть другой выход - может это даже лучше
0
|
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
|
||||||
21.04.2017, 08:50 [ТС] | 9 | |||||
Это все хорошо, но вопрос то был о другом
Есть возможность получить адрес или другой способ сохранить this языковыми средствами? Добавлено через 6 минут Нащупал:
Добавлено через 45 минут Только что осознал вами сказанное. С какой радости он весит больше то?
0
|
Любитель чаепитий
|
|
21.04.2017, 09:23 | 10 |
http://www.cyberguru.ru/cpp/me... ?showall=1
раздел: ПОЧЕМУ УКАЗАТЕЛИ ФУНКЦИЙ-ЧЛЕНОВ НАСТОЛЬКО СЛОЖНЫЕ?
1
|
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
|
|
21.04.2017, 09:35 [ТС] | 11 |
Спасибо за ссылку
Нагуглил уже что размер часто разный, хотя мне кажется реализовать можно бы было и иначе В любом случае, не вижу причину по которой нельзя получить адрес каким-нибудь явным_кастом. И безопасность не пострадала бы, и мучиться бы не пришлось. GCC позволяет, неужели славящийся своими костылями MSVC - нет?
0
|
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
|
|
21.04.2017, 09:52 [ТС] | 13 |
0
|
Любитель чаепитий
|
|
21.04.2017, 09:55 | 14 |
1
|
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
|
||||||
21.04.2017, 10:00 [ТС] | 15 | |||||
reinterpret_cast - одно из первого, что я попробовал. В MSVC не канает - увы, видимо как раз в том дело, что в нем указатель на метод - структура, хотя странно это, раз через __asm можно перекинуть. Но в любом случае спасибо за попытку помочь
Видимо, "красивого" способа тут нет, ну пусть хоть как макрос будет Вдруг кому-нибудь пригодится:
0
|
Любитель чаепитий
|
|
21.04.2017, 10:08 | 16 |
какая у тебя версия студии?
всё работает: http://rextester.com/RTH3043
1
|
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
|
|||||||||||
21.04.2017, 10:23 [ТС] | 17 | ||||||||||
Немного невнимательно посмотрел: там к void* кастуется указатель на указатель на метод, а не ... ну вы поняли
Это в студии работает, правда после выполнения вылетает RTE нарушения стека почему-то Тема адреса там не раскрыта, видимо, по-другому действительно никак, только суровый asm Добавлено через 3 минуты А нет, снова невнимательно посмотрел =) Видимо, ночью надо было спать если его привести к uintptr_t* и разыменовать - получим адрес Итог:
Добавлено через 1 минуту P.S. напридумали же, блин, плясок с этими кастами макрос лаконичнее в итоге выглядит ![]() Добавлено через 7 минут Окончательный итог:
0
|
21.04.2017, 10:23 | |
Помогаю со студенческими работами здесь
17
Указатель на метод класса Указатель на метод класса!
Указатель на метод класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |