1

我要解决的问题是制作一个函数名列表,映射到相应的成员函数指针。

我试图使用 nm 命令直接从 .so 文件中获取函数指针,然后通过函数指针调用它们,但我无法成功。

在 .so 文件中:

0xd52=>DerivedModel::DoSomething()
0xd94=>DerivedModel::checkReference()

偏移量为 0x42。

但在运行时:

0x804d26e DoSomething
0x804d29c checkReference

偏移量为 0x2E。

函数之间的偏移量有所不同。为什么应该不同?我想 vtable 是相同的,所以偏移量应该是相同的。

4

2 回答 2

0

以下可能是符号表中的索引。

0xd52=>DerivedModel::DoSomething()
0xd94=>DerivedModel::checkReference()
于 2012-07-17T07:43:35.210 回答
0

原因是 nm 返回符号的虚拟地址。共享库通常将符号表、数据段存储在不同的地方(检查ELF格式)。nm 返回符号表的地址。但是,当您加载库时,加载器会查找符号表并为每个函数加载数据部分,以便在运行时处理偏移量变化。

于 2012-07-17T04:14:00.890 回答