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

c++ - LD_PRELOAD 应该加载模块还是只使用模块来替换符号

我们有一个用 g++ 编译的多线程 c++ 应用程序,在嵌入式 powerpc 上运行。为了在持续集成测试中对此进行内存泄漏测试,我们创建了一个堆分析器,它加载了ld_preload.

我们希望保证ld_preloaded模块中的函数在其他任何事情发生之前被调用(包括创建静态对象等......)。更重要的是,我们希望在进程退出之前调用另一个函数,以便堆分析器可以输出其结果。ld_preloaded我们看到的问题是,在我们的模块中发生任何事情之前,我们的应用程序中的向量是在全局文件范围内创建的。向量的大小在 main 中增长。在关闭时destructor,我们预加载模块中的函数在向量被销毁之前被调用。

有什么方法可以编写一个预加载的模块来在其他任何事情之前和之后运行一个函数?我们尝试过使用__attribute__((constructor))destructor没有成功。

回到问题标题,我开始怀疑ld在解析后续模块加载的符号时只查看预加载的模块。它实际上并没有首先加载预加载的模块。任何人都可以为我们阐明这一点吗?

0 投票
1 回答
155 浏览

trace - dyld 是否有 ${LIB} 的等价物?

我正在为跟踪库开发 Mac 启动器 - 通过将库添加到DYLD_INSERT_LIBRARIES(Mac 等价于LD_PRELOAD)来进行跟踪。然后,随着进一步的进程产生,该DYLD_INSERT_LIBRARIES变量由跟踪库传播。

问题是我需要 32 位版本的跟踪库用于 32 位跟踪进程,而 64 位版本用于 64 位跟踪进程。在我拥有的 Linux 启动器中,这是通过使用${LIB}in实现的LD_PRELOAD- 动态加载器 ( ld.so) 然后在加载进程时将其替换为“正确的东西”。

在 Mac 上是否有等效于ld.so' 的${LIB}变量?当我查看手册页( https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/dyld.1.htmldyld )时,我无法立即看到一个,但我可能会只是读错了。如果没有,请问有没有其他方法可以达到同样的效果?

0 投票
1 回答
832 浏览

sh - 没有 LD_PRELOAD LD_LIBRARY_PATH 不起作用

我正在设置 LD_LIBRARY_PATH 以使用较新的 Qt Mobility 而不是较旧的 Qt Mobility,以便非本机应用程序可以使用它。

其中一个库是 libQtSensors.so.1

但仍然,

被用来代替

如果我 LD_PRELOAD 第二个库,一切正常,但我不能只预加载所有 qt 移动库,因为它不是一个总是使用的库。

我究竟做错了什么?

0 投票
2 回答
1025 浏览

cocoa - 如何击败框架注入?

是否有人强化他们的代码以试图检测注入?例如,如果有人试图通过 NSUrlConnection 拦截用户名/密码,他们可以使用LD_PRELOAD/DYLD_LIBRARY_PATH,为我的调用提供导出到 NSUrlConnection,然后将调用转发到真正的 NSUrlConnection。

阿里在下面提供了很好的信息,但我试图确定在恶劣的环境中应该采取什么措施,手机可能会被越狱。大多数应用程序不必关心,但一类应用程序需要 - 高完整性软件。

如果您正在硬化,您使用什么方法?是否有一种标准方法可以检测 Mac 和 iPhone 上的注入?你是如何打败框架注入的?

0 投票
1 回答
1667 浏览

hook - LD_PRELOAD 和 strace 有什么区别?

这两种方法都用于收集系统调用以及参数和它们的返回值。我们什么时候喜欢LD_PRELOAD,为什么?也许我们可以说我们只能通过收集系统调用,但我们可以通过技巧strace收集库调用。LD_PRELOAD但是,对于名称为ltrace.

0 投票
3 回答
1815 浏览

c - LD_PRELOADed 库和子进程

每个人!

我有这样的程序(usemalloc)的图像:

如您所见,存在一个导致内存溢出的错误。我想在运行时检测此类错误。LD_PRELOADed 库适合我的工作。我制作了一个名为 libhijack.so 的库来劫持对真正 malloc 的调用,并将其替换为对我自己的自定义 malloc 的调用,该调用调用真正的 malloc 并在由真正的 malloc 分配的内存条的末端添加红色区域。libhijack.so 的代码如下:

我使用以下命令运行带有库的主程序:

然后如果有红色区域的内存访问,我会检测它们并将它们视为内存溢出错误。

当主进程包含对 malloc 的调用时,此 LD_PRELOAD 解决方案运行良好,但在分叉子进程执行此操作时失败。

例如,我们将“usemalloc”改成如下:

LD_PRELOADed 库不会检测到子进程中发生的溢出错误。

所以我的问题是:如何使用 LD_PRELOADed 库检测子进程中的溢出错误?那(使用 LD_PRELOADed 库)可能吗?如果没有,还有其他选择吗?任何建议表示赞赏!

0 投票
0 回答
1207 浏览

c++ - 为什么我的 LD_PRELOAD 拦截适用于打开/关闭而不适用于 fopen/fclose?

我正在尝试使用 LD_PRELOAD 来拦截打开/关闭的调用。我对 close() 的测试实现只是

我有一个测试程序

问题是:我的 LD_PRELOAD 代码成功拦截了 close() 调用,但无法拦截由 fclose() 发出的 close() 系统调用,尽管从 strace 输出来看,这两个系统调用的外观完全相同。

我知道我可以只写我对 fclose() 的拦截,它也适用于 C++ 的 ofstream::close()。但是,我对 open()/fopen() 的拦截仍然不适用于 C++ 的 ofstream::ofstream()。如何确保拦截所有打开或关闭文件的调用,无论是哪个包装函数调用它们?谢谢!

0 投票
2 回答
6831 浏览

android - Android 4.2 - LD_PRELOAD 是否支持?

我想知道较新的 Android 版本现在是否支持 LD_PRELOAD?

在 4.0 ICS 的时候它不是,并且在文档(NDK docs/SYSTEM-ISSUES.html)中仍然有:

但是几天前,我在我的 Android 4.2 Galaxy Nexus 上使用了 LD_LIBRARY_PATH 并且它有效(!)。

提前致谢!

0 投票
0 回答
855 浏览

android - 通过 LD_PRELOAD 重定向文件系统路径

我正在尝试在 Android 终端模拟器中建立一个有效的 Linux 生态系统,但实际上没有 root 访问权限。这意味着我需要调整每个引用,例如/bin/sh在我尝试编译和使用的每个程序的源代码中。

在启动应用程序之前进行设置LD_PRELOAD允许我修改 libc 函数的行为,就像 fakeroot 一样;所以我可能只是编写一个库,它将所有具有绝对路径名的系统调用(例如 /dev、/sys 和 /proc 除外)重定向到我有权写入的文件夹。

该库必须:

  • 重写所有路径名,使它们留在假根目录中
  • 尽管如此,允许来自该目录之外的引用,因为 egprocfs仍然会提供系统绝对路径名
  • 确保子进程不会意外取消设置 LD_PRELOAD

但结果会如何?对于低级代码,我不是专家,所以:

  • 我如何能够始终如一地模拟这样一个“伪造的根目录”?我是不是一开始就被不合作的内核注定了?
  • “假根”内的进程意外突破它有多容易?我不是在谈论故意试图通过汇编代码逃脱。

编辑:也许这个库甚至可以作为 libc 的替代品,只要我将我在该系统上编译的所有软件链接到它?

0 投票
3 回答
893 浏览

c - 函数插入仅适用于 malloc 而不是免费的

我在通过使用函数插入监视 malloc 和 free 时遇到了一个小问题。

当只为 malloc 执行函数插入时,它按预期工作。但是,当尝试插入 free 时,它​​也会进入一个循环;我似乎免费被递归调用,但我只是不知道为什么。

这是 malloc 和 free 函数的代码。(mod_malloc_free.c)

主要简单地包括:

}

编译为:

gcc -shared -ldl -fPIC mod_malloc_free.c -o libcustom.so

gcc -o smallMain -Wall smallMain.c

LD_PRELOAD=./libcustom.so ./smallMain

此致

尼菲肯