【问题标题】:Dumpout Process Memory Layout During Loading Time加载期间的 Dumpout 进程内存布局
【发布时间】:2017-07-30 17:55:19
【问题描述】:

我正在做一个项目,我需要使用LD_PRELOAD 将一些库加载到内存空间中。

就像:

 LD_PRELOAD="./libapp.so" ./my_app

由于某些原因(我实际上正在研究一些二进制黑客),我必须知道@987654324 中某些函数(比如说foo)的内存地址(不是符号) @ 并在执行前检测my_app 的二进制代码。

但是,由于ASLR(地址空间布局随机化),每次libapp.so都会被加载到不同的内存地址,在执行之前我无法知道foo的内存地址。

我正在考虑以某种方式截取加载时间,读出libapp.so 的内存地址,使用foo 的内存地址对my_app 执行一些检测,然后将my_app 加载到内存空间中。

那么这里是我的问题:如何拦截加载过程并获取libapp.so的内存地址?

【问题讨论】:

    标签: linux shared-libraries ld dynamic-linking aslr


    【解决方案1】:

    那么我的问题来了:如何拦截加载过程并获取libapp.so的内存地址?

    这行不通:my_app 被内核加载(mmapped 到内存中)加载程序启动之前,在它有机会查看 LD_PRELOAD 之前。

    最好的办法是在禁用 ASLR (setarch $whatever -R my_app) 的情况下运行应用程序,或者安排 may_app 以便 libapp.so 在知道自己的加载地址后动态检测 my_app

    【讨论】:

      猜你喜欢
      • 2013-08-11
      • 1970-01-01
      • 2019-02-14
      • 2011-09-29
      • 2016-03-13
      • 2010-09-28
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      相关资源
      最近更新 更多