簡體   English   中英

嘗試鏈接到我使用 LD_PRELOAD 創建的共享庫時出錯

[英]Error when trying to link to a shared library I created using LD_PRELOAD

我正在嘗試通過鏈接 Linux 上的共享庫來測試是否可以覆蓋 glibc 的 malloc 接口。 我還沒有 malloc 功能的詳細信息。

因此,我創建了一個nullmalloc.cpp ,它具有 malloc 所需的替換,但都返回 null。 代碼如下所示:

# include <cstddef>

void* malloc(size_t size) { return 0; }
void* calloc(size_t n, size_t size) { return 0; }
void free(void* ptr) { return; }
void* realloc(void* ptr, size_t size) { return 0; }
void* valloc(size_t size) { return 0; }
void* memalign(size_t align, size_t s) { return 0; }
void cfree(void* ptr) { return; }
void* aligned_alloc(size_t align, size_t s) { return 0; }
void* pvalloc(size_t size) { return 0; }
struct mallinfo mallinfo(void);
int mallopt(int cmd, int value) { return 0; }

然后我嘗試通過以下命令創建 cpp 文件的共享庫:

gcc -Wall -fPIC -g -c nullmalloc.cpp // creates nullmalloc.o
gcc -shared -Wl,-soname,nullmalloc.so -o nullmalloc.so nullmalloc.o // creates nullmalloc.so

當我使用 LD_PRELOAD 將nullmalloc.so鏈接到我編寫的名為test.cpp的測試代碼時,我收到一條錯誤消息,提示找不到.so 文件。

我與 LD_PRELOAD 一起使用的命令是這樣的:

g++ -g test.cpp -o test.o -std=c++11 LD_PRELOAD=/home/nullmalloc/nullmalloc.so

我得到的錯誤是:

g++: error: LD_PRELOAD=/home/nullmalloc/nullmalloc.so: No such file or directory

我很困惑,因為當我使用ls命令時存在nullmalloc.so文件。

[root@a nullmalloc]$ ls
nullmalloc.cpp  nullmalloc.o  nullmalloc.so  test.cpp

我才開始研究 malloc、linux 和共享庫,所以我不確定我在哪里犯了錯誤。 有人可以就從哪里開始修復提供建議嗎?

謝謝你。

我不知道如何添加編譯器標志,但您可以使其工作如下。

像往常一樣編譯測試:

g++ -Wall -g test.cpp -o test -std=c++11 

像這樣調用它:

LD_PRELOAD=/home/nullmalloc/nullmalloc.so ./test

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM