gpt4 book ai didi

c++ - 共享库中的成员函数指针地址

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:38 24 4
gpt4 key购买 nike

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

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

在.so文件中:

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

偏移量为 0x42。

但是在运行时:

0x804d26e DoSomething
0x804d29c checkReference

偏移量为 0x2E。

函数之间的偏移量在某种程度上是不同的。为什么要不同?我想 vtable 是相同的,所以偏移量应该是相同的。

最佳答案

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

关于c++ - 共享库中的成员函数指针地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11515587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com