Linux環境下的LD PRELOAD 庫預載入

2021-10-24 11:51:51 字數 2129 閱讀 9237

ld_preload詳解

rtoax

2023年9月

系統在執行過程中,會首先載入該環境變數指定的函式庫(在libc.so之前載入),如果函式庫內包含了程式中執行的函式名,該可執行檔案的函式將被重定向到ld_preload指向的函式中。

#ifndef _mymalloc_h

#define _mymalloc_h

#include

void

*malloc

(size_t size)

;void

free

(void

*ptr)

;#endif

#include

#include

"mymalloc.h"

void

*malloc

(size_t size)

void

free

(void

*ptr)

gcc -fpic -shared mymalloc.c -o libmymalloc.so
#include

"mymalloc.h"

#include

#include

intmain()

gcc main.c
# ./a.out 

#

沒有任何輸出

export ld_preload=

$(pwd

)/libmymalloc.so

# ./a.out 

call mymalloc.

call myfree.

#

此時你會發現,在此bash(terminal)下執行系統指令,malloc也會被重定向到我們編寫的動態庫中。

# ls

call mymalloc.

call mymalloc.

call myfree.

call mymalloc.

call mymalloc.

call mymalloc.

call myfree.

call myfree.

call mymalloc.

call mymalloc.

call mymalloc.

call myfree.

call myfree.

ls: call myfree.

call myfree.

memory exhaustedcall myfree.

call myfree.

ls指令是執行失敗的。

all:

@echo "make lib :編譯malloc動態庫"

@echo "make test :編譯示例程式"

@echo "make ld :設定ld_preload動態庫"

@echo "make reset :取消使用ld_prelaod環境變數"

@echo " 上面命令不起作用,請直接執行 # unset ld_preload"

lib:

gcc -fpic -shared mymalloc.c -o libmymalloc.so

test:

gcc main.c

ld: @echo "請在終端輸入:export ld_preload=$(pwd)/libmymalloc.so"

reset:

unset ld_preload

ld_preload重定向了posix api函式,或者說,不光是posix函式,試想一下,假如用這種方法替換鑑權類的介面會發生什麼?

bool auth_passwd

(char

*name,

char

*passwd)

;

這裡我還沒有時間調研,後面有時間再說。先在這裡說一下。

Linux環境下的備份

空間使用 most least less than full 備份速度 slowest fastest faster than full 恢復速度 fastest slowest faster than incremental 差分備份可能會備份增量備份忽略的資料,但是差分備份恢復速度要比增量快,因...

linux環境下的程序

程式的乙個執行例項,正在執行的程式等,同時是分配系統資源的基本單位 描述程序 pcb 在linux環境下用task struct的結構體來描述程序,該結構體包含了程序所需要的所有資訊。task struct 是核心中linux下的一種資料結構,它會被裝載在ram下包含程序的資訊。內容分類 識別符號 ...

Linux下Apache Python環境搭建

一.環境說明 1.系統環境 centos release 5.4 final 2.軟體版本 apache 2.2.3 python 2.6.6 mod python 3.3.1 二.安裝apache 安裝過程略。2.如果使用系統自帶的apache,則需要檢視系統是否安裝httpd devel包。操作...