加载时间内的转储进程内存布局

时间:2017-07-30 17:55:20

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

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

就像:

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

由于某些原因(我实际上正在进行一些二进制黑客操作),我必须知道某些功能的内存地址(不是符号)(比如说,{{1在foo中{}}并在执行前检测libapp.so的二进制代码。

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

我想以某种方式拦截加载时间,读出foo的内存地址,在libapp.so上使用内存地址my_app执行一些检测,然后加载{{1进入内存空间。

所以这是我的问题:如何拦截加载过程并获取foo的内存地址?

1 个答案:

答案 0 :(得分:0)

  

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

这不起作用:在加载器启动之前,内核my_app加载(mmap到内存中),并且在它有机会查看之前LD_PRELOAD

您最好的选择是在禁用ASLR的情况下运行应用程序(setarch $whatever -R my_app),或安排may_app,以便libapp.so能够动态识别my_app自己的加载地址。