尝试 link 到我使用 LD_PRELOAD 创建的共享库时出错

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

我正在尝试测试是否可以通过 link 在 Linux 上共享库来覆盖 glibc 的 malloc 接口。我还没有 malloc 函数的详细信息。

所以我创建了一个 nullmalloc.cpp,它具有所需的 malloc 替换,但所有 returns 都是空的。代码如下所示:

# 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 到 link 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