Указатель на функцию C++ в Cycript

В cycript можно получить ссылку на указатель на функцию c, но я не смог использовать этот синтаксис для извлечения указателя на функции C++, используя либо их собственные, либо искаженные имена функций из таблицы символов.

Есть ли способ добраться отсюда?

Обновить:

Обновление от ввода Saurik:

Я не пробовал указатели на функции из символов стиля c, но вы абсолютно правы в том, что нижнее подчеркивание нужно убрать. _DES_encrypt3 должен быть доступен с:

cy# dlsym(RTLD_DEFAULT, "DES_encrypt3")
0x14dc19

Это дает мне правильный адрес указателя.

Когда я смотрю на искаженный символ для xmpp::CapsManager::~CapsManager(), который является __ZN4xmpp11CapsManagerD2Ev_1bf718, я пытаюсь

cy# dlsym(RTLD_DEFAULT, "__ZN4xmpp11CapsManagerD2Ev_1bf718")
null
cy# dlsym(RTLD_DEFAULT, "_ZN4xmpp11CapsManagerD2Ev_1bf718")
null
cy# dlsym(RTLD_DEFAULT, "ZN4xmpp11CapsManagerD2Ev_1bf718")
null

Ни один из этих вариантов не дает указатель.

1 ответ

Мое непосредственное предположение состоит в том, что вы пытаетесь взять необработанное искаженное имя символа (как вы описываете, получая его из таблицы символов), передавая его в dlsym... но для dlsym требуется имя символа уровня C, что означает, что ваш подход будет не работает даже для простого символа C: у вас будет дополнительный _ в начале (если вы проверите таблицу символов, вы увидите, что функции C также искажены, для начала _). Если вы удалите ведущий _, вы сможете использовать dlsym для поиска вашего искаженного символа C++.

Другие вопросы по тегам