給出一個動態鏈接的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文件)到(導入)功能?