如何在提供库地址时获取共享库中符号的地址?
How to get address of a symbol in a shared library when provided address of the library?
我正在 Linux 学习如何在 C/C++ 中使用共享库。遇到了一个小问题不知道怎么解决
假设我有一个共享库和一个可执行文件。但是我不知道图书馆的名称或文件位置(所以我不能 dlopen
它)。我只能找到库映射到我的可执行文件内存的地址范围。
有没有办法以编程方式获取库的句柄(类似于 handle = dlopen(library_address)
)或库中符号的偏移量(类似于 address = dlsym(library_address, symbol_name)
)?
如果您知道图书馆的名称,您可以再次调用 dlopen
。
来自man page:
If the same shared object is loaded again with dlopen()
, the same object handle is returned.
要发现加载的模块,您可以使用dl_iterate_phdr()
。
您也可以使用dladdr()
查询具体地址
我正在 Linux 学习如何在 C/C++ 中使用共享库。遇到了一个小问题不知道怎么解决
假设我有一个共享库和一个可执行文件。但是我不知道图书馆的名称或文件位置(所以我不能 dlopen
它)。我只能找到库映射到我的可执行文件内存的地址范围。
有没有办法以编程方式获取库的句柄(类似于 handle = dlopen(library_address)
)或库中符号的偏移量(类似于 address = dlsym(library_address, symbol_name)
)?
如果您知道图书馆的名称,您可以再次调用 dlopen
。
来自man page:
If the same shared object is loaded again with
dlopen()
, the same object handle is returned.
要发现加载的模块,您可以使用dl_iterate_phdr()
。
您也可以使用dladdr()
查询具体地址