加载期间的转储过程内存布局
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
一旦它知道自己的加载地址。
我正在做一个项目,我需要使用 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
一旦它知道自己的加载地址。