2017-07-30 48 views
0

我正在開發一個項目,我需要使用LD_PRELOAD將一些庫加載到內存空間中。加載時間期間Dumpout進程內存佈局

這就像:

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

由於某些原因(我在實際工作中的一些二進制黑客攻擊),我必須知道的某些功能(內存地址(不是符號)讓我們說,foo )在libapp.so中,並在執行前測試my_app的二進制代碼。

但是,由於ASLR(地址空間佈局隨機化),每次libapp.so將被加載到不同的內存地址,並且在執行之前我無法知道foo的內存地址。

我想以某種方式攔截加載時間,讀出的libapp.so的內存地址,在my_appfoo內存地址進行一些儀器,然後加載到my_app的內存空間。

所以這裏是我的問題:如何截取加載過程並獲取libapp.so的內存地址?

回答

0

所以這裏是我的問題:如何攔截加載過程並獲取libapp.so的內存地址?

這可不行:my_app被加載(mmap PED到內存)的裝載機開始之前內核,並收到了一個機會看看LD_PRELOAD

您最好的選擇是要麼運行與ASLR的應用程序禁用(setarch $whatever -R my_app),或安排may_app這樣libapp.so可以動態儀器my_app一旦知道自己的加載地址。