2008年7月18日 星期五

LD_PRELOAD

在一般的OS當中, 都有提供dynamic linker的能力, 就是當一個application再執行的時候,
可以動態的將一個shared library載入到程式中.

在Unix or Unix like的系統中, 可以使用LD_PRELOAD這個環境變數, 可以將而外的library載入到程式. 而且lirary的function可以覆蓋既有library的function.
例如 :
我們自己寫一個 malloc.so 這個一library, 裡面有一個我們自己寫的malloc()
然後執行


LD_PRELOAD="./malloc.so" test_prog


在test_prog裡, 所有的malloc都不再是呼叫系統標準library的malloc, 而是呼叫malloc.so

這樣, 可以讓我們方便再不重新compiler 程式的情況下, 做特定function的debug, test等.

當然, 這個工具也有另外的用途, 就是用來做Reverse Engineering (逆向工程).
有興趣的人可以參考下面的文章 :
Reverse Engineering with LD_PRELOAD

沒有留言: