gpt4 book ai didi

linux - 将外部函数与共享库相匹配

转载 作者:太空宇宙 更新时间:2023-11-04 04:10:39 26 4
gpt4 key购买 nike

我想知道如何将二进制文件调用的外部函数与其链接的共享库相匹配。例如,我可以查看反汇编文件的 .plt 部分中的函数,并且可以使用 ldd 找到使用的库(或查看 ELF 动态部分);但如何将每个函数与其库相匹配?

最佳答案

我按照 Laszio 提示创建了一个小 python 函数,它获取二进制文件名,并通过混合 ldd 和 nm,返回一个字典,其中包含外部函数及其共享库。也许这有点令人困惑,但它确实有效:)这是代码

def get_dynamicOBJ(filename):
p_nm = subprocess.Popen(["nm", "-D", filename], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result_nm = p_nm.stdout.readlines()
p_ldd = subprocess.Popen(["ldd", filename], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result_ldd = p_ldd.stdout.readlines()
dyn = {}

for nm_out in result_nm:
sym_entry = nm_out.split()
if len(sym_entry) >= 2 and sym_entry[0 if len(sym_entry) == 2 else 1] == "U":
sym = sym_entry[1 if len(sym_entry) == 2 else 2]
for lld_out in result_ldd:
lib_entry = lld_out.split()
if "=>" in lld_out and len(lib_entry) > 3: # virtual library
lib = lib_entry[2]
ls_nm = subprocess.Popen(["nm", "-D", lib], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result_lsnm = ls_nm.stdout.readlines()
for ls_nm_out in result_lsnm:
lib_symbol = ls_nm_out.split()
if len(lib_symbol) >= 2 and lib_symbol[0 if len(lib_symbol) == 2 else 1] == "T":
if sym == lib_symbol[1 if len(lib_symbol) == 2 else 2]:
dyn[sym] = lib

return dyn

关于linux - 将外部函数与共享库相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19283264/

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