问题标签 [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 回答
2454 浏览

c++ - LD_PRELOAD 仅适用于 malloc,不是免费的

我正在尝试通过 LD_PRELOAD 将一些插入器插入 malloc/free/calloc/realloc 等。在我的小测试中,malloc似乎只有插入,即使free检测到(见输出)。

我希望输出包含一行“NANO:free(x)”——但这条线不见了。

给定

实际输出为:

0 投票
5 回答
3780 浏览

c++ - 某些可执行文件的 LD_PRELOAD 和 calloc() 插入问题

关于我以前的问题

我已经成功介入malloc,但calloc似乎问题更大。

也就是说,某些主机calloc陷入无限循环,内部可能存在内部calloc调用dlsym。但是,基本测试主机不会表现出这种行为,但我系统的“ls”命令会表现出这种行为。

这是我的代码:

现在,当我执行以下操作时,我得到一个无限循环,然后是一个段错误,例如:

但是,如果我注释掉插入器,它似乎calloc几乎可以工作:

所以“ls”有点意思,这意味着init()被调用了两次。

编辑请注意,以下主机程序可以正常工作 -init()只调用一次,并且calloc成功插入,正如您从输出中看到的那样。

0 投票
2 回答
907 浏览

c - LD_PRELOAD、bash 和 printf

我有一个共享对象,它printf()通过init的属性执行一些操作;很简单。它只是告诉我我设置的一些变量。

当我LD_PRELOAD=mylib.so ./program.sh -flags由于program.shprintfs 吐出错误时:

然后程序正常启动。看起来 bash 脚本在printf()检查变量时被 s 破坏了。

有解决方法吗?

0 投票
1 回答
148 浏览

gpl - 是否为允许 LD_PRELOADS 非 GPL 库的 GPL 程序分发初始化脚本?

我是否可以一起分发:

  • 一个 GPL 程序及其源代码
  • 没有源代码的非自由库
  • 一个初始化脚本,它 LD_PRELOADS 库到 GPL 程序

GPL 程序在没有非自由库的情况下也能正常工作。这个非自由库提供与程序二进制链接到的自由库相同的接口。

我是否可以将这些东西一起分发,或者这会违反 GPL 吗?

0 投票
1 回答
12714 浏览

macos - OSX 上 LD_PRELOAD 的确切等价物是什么?

LD_PRELOAD用来挂钩一个库函数,在 Linux 中它工作得很好。但我不知道如何在 OSX 中做同样的事情。

我在 Linux 上的设置如下:

代码是:

然后我编译:

然后我执行:

以上所有内容在 Linux 上运行良好,在 OSX 上运行的每个步骤相当于什么?我已经用谷歌搜索了这个,但由于缺少某些步骤的信息,所以无法让它与提供的信息一起工作。

提前致谢!

0 投票
2 回答
551 浏览

python - 无法使用 LD_PRELOAD 拦截 PyDict_New

我正在尝试使用 LD_PRELOAD 来拦截 PyDict_New 函数。我已经验证了这个配方在 python 解释器中与 getpid 一起工作,并且我已经对其进行了调整以使用 PyDict_New,但它根本不像我预期的那样工作。虽然我清楚地分配了字典,并且必须使用这个函数,但我的覆盖没有被调用。

我究竟做错了什么?


背景:我正在尝试在一个非常大的系统中调试问题。我发现有一个引用计数错误的字典。我知道第一次分配 dict 的位置,以及问题出现的位置,但我很确定在某个中间时间计数会变坏,并且简单的代码跟踪不会做,因为 dict 被缓存并重用(通过 PyDict_New)由 gc 系统。

0 投票
1 回答
417 浏览

c - Sometimes, LD_PRELOAD in HPUX and Solaris cannot take effect

I get some problem about LD_PRELOAD.

When I use LD_PRELOAD in HPUX and Solaris, I found that I cannot attach my open64/open/creat64/creat function in /usr/bin/touch, but my unlink can take effect in /usr/bin/rm, why?

I have do a simple test:

when i do this, i found : normally, i cannot open file, but touch can do it!

why!i was puzzled by this for long time. who can help me.thx

at last, sorry for my poor English

0 投票
1 回答
1690 浏览

c - libfaketime 和 Mac OS,LD_PRELOAD

运行 Mac OS 10.7.2 并尝试运行libfaketime并没有任何反应。我完全按照指示安装和运行,只是时间和日期与系统中设置的完全一致?有其他人能够在 OSX 上成功运行它吗?

0 投票
1 回答
3126 浏览

gcc - 拦截 GNU tar 的 openat() 系统调用

我正在尝试openat()使用可以通过加载的自定义共享库来拦截 Linux 上的系统调用LD_PRELOAD。一个例子intercept-openat.c有这样的内容:

我通过gcc -fPIC -Wall -shared -o intercept-openat.so intercept-openat.c -ldl. 然后,当我运行这个小示例程序时:

openat()调用通过库重写:

但是,GNU tar 不会发生同样的情况,即使它使用相同的系统调用:

所以自定义openat()fromintercept-openat.so没有被调用。这是为什么?

0 投票
2 回答
3712 浏览

c - 如何使用 gdb 调试加载了 LD_PRELOAD 的动态库中的函数?

我正在尝试调试动态共享库 libexecHook.so 中的一些函数。这个库是预加载设置 LD_PRELOAD 为了拦截和重写一些对 execve() 和朋友的调用。出于调试目的,我用符号构建了 gmake。根据我在其他问题中读到的内容,这应该有效:

我确实看到断点设置正确,例如

但是 gdb 永远不会在我预加载的 exec..() 函数中中断。在执行期间观察调试输出,我看到我的库函数正在被调用。