问题标签 [ld-preload]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1396 浏览

c - LD_PRELOADing malloc 和 free

我编写了自己的mallocfree并将它们编译到共享库中。我用我的程序 LD_PRELOAD 那个库。这样,我的程序将始终使用我的自定义mallocfree还是在某些情况下并非如此。我听说 gcc 也内置了 malloc 和free。我的 gcc 附带的 glibc 是否有可能使用内置的mallocfree

其次,我注意到当我运行我的程序时,我看到自由函数调用比malloc/calloc调用更频繁(98 到 16)。我自己不进行任何内存分配(在一个地方除外),所以所有分配都是由我使用的标准库函数完成的。还要注意我在我的程序中使用 pthread 。如果你想知道,我的程序是这样的。

0 投票
1 回答
989 浏览

c++ - LD_PRELOAD 是否适用于所有版本的 unix/linux?

我写了一个简单的 LD_PRELOAD 模块,在 Ubuntu 服务器上编译。此预加载是否适用于其他系统,如 Solaris、FreeBSD、CentOS 等。在某些操作系统上是否有任何特殊问题?

0 投票
1 回答
1338 浏览

c++ - 如何为大多数系统编译 LD_PRELOAD

我有一个 LD_PRELOAD 文件。在什么操作系统和条件下,我应该编译这个预加载以在大多数系统(Unix/Linux)上工作。最需要的是 FreeBSD、Ubuntu、CenstOS、Solaris。

谢谢!

0 投票
1 回答
983 浏览

c++ - 在 64 位 Ubuntu 上编译 x32 位 LD_PRELOAD

我正在尝试在 x64 平台(Ubuntu)上编译 x32 LD_PRELOAD,我的命令:

但我收到错误:

我该如何解决?谢谢!

0 投票
1 回答
850 浏览

c - LD_PRELOAD 未预加载所有符号

我正在尝试 LD_PRELOAD 函数,例如mmap, read, open,clone等等...,但是虽然某些函数确实成功地获得了 LD_PRELOADed,但其他函数却没有。例如mmapread并且open完全被预加载但clone不是,虽然我肯定知道clone是从我的程序中调用的strace,因为我使用的是 pthreads。clone这里没有被 LD_PRELOADed的原因是什么?

0 投票
1 回答
219 浏览

c++ - 使用 boost 运行 LD_PRELOAD 时出错

我编译了使用 boost (locks.hpp) 的 LD_PRELOAD。编译成功。我将此 LD_PRELOAD 复制到其他 linux 服务器,当我运行时,错误:

/usr/bin/java:符号查找错误:/test/test.so:未定义符号:_ZN5boost11this_thread20disable_interruptionC1Ev

我怎样才能解决这个问题?如果不在此服务器上安装 boost,我可以避免这个问题吗?

我如何编译 LD_PRELOAD:

谢谢!

0 投票
1 回答
756 浏览

c++ - 在Linux上接受时相同的SOCKET id?

我写了 LD_PRELOAD 来拦截 accept() 函数。我有一个问题,因为有时接受函数给了我相同的文件描述符。我只为一个进程加载这个预加载

我的代码:

输出是:

文件描述符:213

文件描述符:213 <-- 为什么?

...

关闭描述符:213

为什么接受函数返回相同的文件描述符?

谢谢!

0 投票
2 回答
1452 浏览

c++ - G++如何在Linux服务器上为FreeBSD编译

我为 linux/unix(ld_preload) 编写了一些代码,我如何使用 G++ 或其他编译器在我的 Ubuntu 服务器上为 FreeBSD 编译它?

谢谢!

0 投票
1 回答
1668 浏览

linux - 将参数传递给加载了 LD_PRELOAD 的库

是否可以将参数传递给我的库,该库加载有LD_PRELOAD

如何将参数传递给这个库?

0 投票
1 回答
397 浏览

c++ - 使用 LD_PRELOAD 和 C++ 中的全局范围对象加载堆分析器

我们编写了一个堆分析器(供参考lib_debug),它覆盖freemalloc(和其他),主要用于监视我们的应用程序中的错误,例如内存泄漏,这些应用程序部署在运行 Linux 的 PPC 系统上。lib_debug被编译为共享库,LD_PRELOAD在需要时加载。

到目前为止,此调试器运行良好;每当malloc被调用时,都会在堆栈上创建一个内存监视器单例,当此单例在退出时超出范围时,它会报告任何未释放的内存。

但是,我们的一个应用程序现在std::vector在全局范围内分配 a。看起来这个全局vector是在我们的堆分析器之前创建的,最重要的是之后被销毁。因此,一旦main我们在 this 中插入任何东西vectorlib_debug就会认为我们在关机时有内存泄漏。

为了说明,这就是我认为的事件顺序:

  1. LD_PRELOADlib_debug从;加载符号
  2. std::vector在全局范围内的堆栈上创建;
  3. lib_debug初始化发生 -malloc已在某处调用,这会导致在堆栈上创建实际的堆分析器单例;
  4. 输入main
  5. std::vector::push_back()发生,在堆上分配内存;
  6. main退出;
  7. 堆分析器单lib_debug例超出范围,它看到vector没有释放其内存 - 报告错误;
  8. vector超出全局范围,释放其内存;
  9. 程序终止。

因此,有什么方法可以保证我们的LD_PRELOADed单例总是最后被删除,从而捕获free我们应用程序中出现的每一个单例?