问题标签 [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.
c++ - LD_PRELOAD 仅适用于 malloc,不是免费的
我正在尝试通过 LD_PRELOAD 将一些插入器插入 malloc/free/calloc/realloc 等。在我的小测试中,malloc
似乎只有插入,即使free
检测到(见输出)。
我希望输出包含一行“NANO:free(x)”——但这条线不见了。
给定
和
实际输出为:
c++ - 某些可执行文件的 LD_PRELOAD 和 calloc() 插入问题
关于我以前的问题
我已经成功介入malloc
,但calloc
似乎问题更大。
也就是说,某些主机calloc
陷入无限循环,内部可能存在内部calloc
调用dlsym
。但是,基本测试主机不会表现出这种行为,但我系统的“ls”命令会表现出这种行为。
这是我的代码:
现在,当我执行以下操作时,我得到一个无限循环,然后是一个段错误,例如:
但是,如果我注释掉插入器,它似乎calloc
几乎可以工作:
所以“ls”有点意思,这意味着init()
被调用了两次。
编辑请注意,以下主机程序可以正常工作 -init()
只调用一次,并且calloc
成功插入,正如您从输出中看到的那样。
c - LD_PRELOAD、bash 和 printf
我有一个共享对象,它printf()
通过init的属性执行一些操作;很简单。它只是告诉我我设置的一些变量。
当我LD_PRELOAD=mylib.so ./program.sh -flags
由于program.sh
printfs 吐出错误时:
然后程序正常启动。看起来 bash 脚本在printf()
检查变量时被 s 破坏了。
有解决方法吗?
gpl - 是否为允许 LD_PRELOADS 非 GPL 库的 GPL 程序分发初始化脚本?
我是否可以一起分发:
- 一个 GPL 程序及其源代码
- 没有源代码的非自由库
- 一个初始化脚本,它 LD_PRELOADS 库到 GPL 程序
GPL 程序在没有非自由库的情况下也能正常工作。这个非自由库提供与程序二进制链接到的自由库相同的接口。
我是否可以将这些东西一起分发,或者这会违反 GPL 吗?
macos - OSX 上 LD_PRELOAD 的确切等价物是什么?
我LD_PRELOAD
用来挂钩一个库函数,在 Linux 中它工作得很好。但我不知道如何在 OSX 中做同样的事情。
我在 Linux 上的设置如下:
代码是:
然后我编译:
然后我执行:
以上所有内容在 Linux 上运行良好,在 OSX 上运行的每个步骤相当于什么?我已经用谷歌搜索了这个,但由于缺少某些步骤的信息,所以无法让它与提供的信息一起工作。
提前致谢!
python - 无法使用 LD_PRELOAD 拦截 PyDict_New
我正在尝试使用 LD_PRELOAD 来拦截 PyDict_New 函数。我已经验证了这个配方在 python 解释器中与 getpid 一起工作,并且我已经对其进行了调整以使用 PyDict_New,但它根本不像我预期的那样工作。虽然我清楚地分配了字典,并且必须使用这个函数,但我的覆盖没有被调用。
我究竟做错了什么?
背景:我正在尝试在一个非常大的系统中调试问题。我发现有一个引用计数错误的字典。我知道第一次分配 dict 的位置,以及问题出现的位置,但我很确定在某个中间时间计数会变坏,并且简单的代码跟踪不会做,因为 dict 被缓存并重用(通过 PyDict_New)由 gc 系统。
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
c - libfaketime 和 Mac OS,LD_PRELOAD
运行 Mac OS 10.7.2 并尝试运行libfaketime并没有任何反应。我完全按照指示安装和运行,只是时间和日期与系统中设置的完全一致?有其他人能够在 OSX 上成功运行它吗?
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
没有被调用。这是为什么?
c - 如何使用 gdb 调试加载了 LD_PRELOAD 的动态库中的函数?
我正在尝试调试动态共享库 libexecHook.so 中的一些函数。这个库是预加载设置 LD_PRELOAD 为了拦截和重写一些对 execve() 和朋友的调用。出于调试目的,我用符号构建了 gmake。根据我在其他问题中读到的内容,这应该有效:
我确实看到断点设置正确,例如
但是 gdb 永远不会在我预加载的 exec..() 函数中中断。在执行期间观察调试输出,我看到我的库函数正在被调用。