0

在 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

这些变化都不会产生指针。

4

1 回答 1

1

我的直接猜测是您正在尝试获取原始的损坏符号名称(正如您所描述的,从符号表中获取它),将其传递给 dlsym ......但是 dlsym 需要一个 C 级符号名称,这意味着您的方法将即使对于简单的 C 符号也不起作用:开头会有一个额外的 _(如果您检查符号表,您会发现 C 函数也被错位了,以 _ 开头)。如果你去掉前导 _ 你应该能够使用 dlsym 来查找你的错位 C++ 符号。

于 2014-02-28T12:38:34.147 回答