给出一个动态链接的ELF二进制文件,比如说/bin/less
。Linux ELF文件:如何获取属于导入函数的共享对象
二进制内部,存在要由共享库提供的函数的调用,例如strcpy()
如何可以找出从共享库/共享对象获得strcp
功能? 换句话说,我想获得func_name/shared_obj_name.so对。
接听this post,迈克尔·斯莱德说:
ELF文件没有指定哪些符号来自哪个库;它 只是添加一个共享库列表链接到ELF二进制文件,并允许链接程序找到库中的符号。
然而,必须有一种方法来收集所需的信息(使用链接器)。执行二进制和追踪它在我的情况下不是一个选项。我试过到目前为止:
我试图objdump -T /bin/less | grep strcpy
这给了我:
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 strcpy
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.3.4 __strcpy_chk
这既不是unambigious也没有给我一个.so
文件的名称。
运行ldd /bin/less
,返回:
linux-vdso.so.1 => (0x00007ffe8b7fa000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f92c23a5000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f92c1fe0000)
/lib64/ld-linux-x86-64.so.2 (0x00007f92c25ec000))
让我觉得 “GLIBC_2.2.5” 对应libc.so.6
我如何以编程方式找到相应的共享对象(.so文件)到(导入)功能?