【问题标题】:How to verify LD_PRELOAD is running?如何验证 LD_PRELOAD 是否正在运行?
【发布时间】:2021-03-25 17:42:38
【问题描述】:

我知道LD_PRELOAD 被设置在我的so 库之前。

LD_PRELOAD=my_lib.so ./my_exec

如何观看?是否有类似/proc/pid/... 的路径显示为此进程加载的库的顺序?

【问题讨论】:

  • 也许你可以覆盖一些随机函数,比如open,让它崩溃程序。然后运行它。程序会崩溃吗?

标签: c linux shared-libraries ld-preload


【解决方案1】:

查看/proc/$pid/maps,如果已加载,您应该会在那里看到库。至于检查加载顺序,“之前”部分是根据定义,引用手册页:

LD_PRELOAD

要在所有其他对象之前加载的其他用户指定的 ELF 共享对象的列表。

【讨论】:

  • 所以我需要查看/proc/$pid/maps 库my_lib.so 的地址比另一个库低吗?
  • 不一定,我认为当前的加载器会为库分配随机地址,因为安全性。你为什么在乎?如果已加载,则库中的任何公共符号都将覆盖通常加载的库中的同名符号。这就是预加载的作用。
  • 我怀疑是XY problem。你真正想解决什么问题?
猜你喜欢
  • 2016-05-15
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 2015-05-29
  • 1970-01-01
相关资源
最近更新 更多