linux proc self exe,如何检测Linux上/ proc/self/maps中的可执行文件或共享对象

我想列出所有加载到应用程序地址空间的库(.so)。我使用procfs并从/ proc/self/maps中读取信息。我现有的方法来检测文件是可执行文件或.so?或者我需要将每个找到的模块名称与/ proc/self/exe的值进行比较?如何检测Linux上/ proc/self/maps中的可执行文件或共享对象

UPD还有一些问题。

当我解析/ proc/self /映射procfs文件时,我想找到每个找到的加载.so模块的基地址,但我可以找到方法使其无需dl *函数调用。

我尝试使用提供dladdr:

Dl_info info;

int dladdrRes = dladdr((void*)(mmIt->startAddr), &info);

if (!dladdrRes) continue;

std::string modName = info.dli_fname;

void *modBase = info.dli_fbase;

但MODBASE不是一个地址,其中 'dlopen的' 函数返回。 只有这样,它调用文件的dlopen'功能的工作原理:

dlopen(filename.c_str(), RTLD_NOW|RTLD_NOLOAD|RTLD_LOCAL);

我的想法是:当我解析的/ proc /自/地图,我知道所有加载的模块的名称,我不”需要调用内核来查找加载模块的基础。我发现,这是我的错。

+0

您的第二个想法似乎是最合理的捷径,避免了像打开所有这些文件和解析ELF标头这样的困难。 –

+0

我自己解析ELF似乎不是一个好主意,我只想使用公共记录的API –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值