首页 文章

如何在提供库的地址时获取共享库中符号的地址?

提问于
浏览
1

我正在学习如何在Linux上使用C / C中的共享库 . 我遇到了一个我不知道如何解决的问题 .

让's say I have a shared library and an executable. However I don' t知道库's name or file location (so I can' t dlopen 它) . 我只能找到库映射到可执行文件内存的地址范围 .

有没有办法以编程方式获取库的句柄(类似于 handle = dlopen(library_address) )或库中的符号偏移(类似于 address = dlsym(library_address, symbol_name) )?

谢谢您的回答 .

1 回答

  • 3

    如果你知道图书馆的名字,你可以再次拨打 dlopen .

    来自man page

    如果使用dlopen()再次加载相同的共享对象,则返回相同的对象句柄 .

    要发现已加载的模块,可以使用dl_iterate_phdr() .

    您也可以使用dladdr()来查询特定地址 .

相关问题