在cycript中,可以获得对c function pointer的引用,但是我一直无法使用该语法来使用符号表中的正确或损坏的函数名来检索指向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
这些变化都不会产生指针。
答案 0 :(得分:1)
我的直接猜测是你试图获取原始的损坏符号名称(正如你所描述的,从符号表中获取它),将其传递给dlsym ...但是dlsym需要一个C级符号名称,这意味着你的方法即使对于一个简单的C符号也不会起作用:你将在开头有一个额外的_(如果你检查符号表,你会看到C函数也被破坏,以_开头)。如果你去掉前导_你应该能够使用dlsym查找你的错误的C ++符号。