加载期间的转储过程内存布局

Dumpout Process Memory Layout During Loading Time

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

就像:

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

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

但是由于ASLR(Address Space Layout Randomization),每次libapp.so都会加载到不同的内存地址,我无法知道内存地址foo 执行前。

我正在考虑以某种方式拦截加载时间,读出 libapp.so 的内存地址,使用 foo 的内存地址对 my_app 执行一些检测,然后加载 my_app进入内存space.

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

So here is my question: how to intercept the loading process and acquire the memory address of libapp.so?

这行不通:my_app 由内核 加载程序启动之前加载(mmap 写入内存)有机会看看 LD_PRELOAD.

您最好的选择是 运行 禁用 ASLR 的应用程序 (setarch $whatever -R my_app),或者安排 may_app 以便 libapp.so 可以动态检测 my_app一旦它知道自己的加载地址。